2016-04-12 30 views
0

私は、特定のサイズ以下で画面を縮小してテーブル行をクリックすると、そのテーブル行の他の項目を表示する機能があります。 (左の白い画面)。ウィンドウのサイズ変更時にng-classを変更するにはどうすればよいですか?

enter image description here

私は、ウィンドウを展開したときそれから私は、すべてのテーブルの行が正常に戻るにしたいが、私はそれがすでに開いている場合、それは閉じませんバグを持っています。
enter image description here

私は真/偽に$ scope.showIt変数を設定しようとしたが、それが最初の$のscope.showIt値の反対だ場合の効果を持っているようです。画面が一定の大きさであれば、どのようにすべてのng-classをどのように変更すればよいですか?

これは私のhtmlです:

<tr class="table-body "ng-repeat="service in services | orderBy:myOrderBy | filter:search"> 
    <td align="center" valign="middle" ng-click="showIt = dropDetails(showIt)" ng-class="{'name-show':showIt, 'name-show-disabled':!showIt}">{{ service.name }}</td> 
    <td ng-class="{'show':showIt, 'show-disabled':!showIt}">{{ service.description }}</td> 
    <td ng-class="{'show':showIt, 'show-disabled':!showIt}">{{ service.prices }}</td> 
</tr> 

そして、私のコントローラで:

$scope.dropDetails = function(showIt){ //This function works well. 
    console.log(window)  
    console.log(window.innerWidth)  
    if(window.innerWidth < 760){ 
     return !showIt; 
    }else{ 
     return showIt; 
    } 

} 

var w = angular.element($window); 
var resizeId=0; 
$scope.showIt = true; 

w.bind('resize ', function (a) { 
     clearTimeout(resizeId); 
     resizeId = setTimeout(function(){ 

     if(w[0].innerWidth < 760){ 

     }else{ 

      $scope.showIt = true; //Does nothing. 
      $scope.$apply(); 

     }     
     }, 500); 
}) 
+0

'$ scope.showIt'を' false'に設定することはありません。そのタイプミスですか? –

+0

@AdnanUmer 'dropDetails'関数は、ng-clickでfalseに設定します。 – Squirrl

+0

' if(window.innerWidth <760){ return!showIt; } ' – Squirrl

答えて

1

は角ビューでng-modelを定義しながら、Dot Ruleを使用しています。それは、プロパティを参照しながらプロトタイプの継承に従うのに役立ちます。

ここでの理由は、ng-repeat(これは、プロトタイプ的に継承された子スコープを作成し、ビューを表示するたびにテンプレートをレンダリングしているためです)。ここで同じことをする必要があります。 $scope.modelのようなモデルを定義し、内部にはshowItのプロパティを定義します。むしろ、showItをそれぞれあなたの要素のservicesに置く必要があります。これによって、個々のイベントを個別に処理します。

<tr class="table-body" ng-repeat="service in services | orderBy:myOrderBy | filter:search"> 
    <td align="center" valign="middle" 
     ng-click="service.showIt= dropDetails(service.showIt)" 
     ng-class="{'name-show':service.showIt, 'name-show-disabled':!service.showIt}"> 
     {{ service.name }} 
    </td> 
    <td ng-class="{'show':service.showIt, 'show-disabled':!service.showIt}"> 
     {{ service.description }} 
    </td> 
    <td ng-class="{'show':service.showIt, 'show-disabled':!service.showIt}"> 
     {{ service.prices }} 
    </td> 
</tr> 

マークアップは、今の質問はすべてservicesを非表示にする方法のままなので、それは非常に簡単だろう。各servicesコレクションエレメント&をループし、showIt変数をfalseに設定します。

angular.forEach($scope.services, function(service){ 
    service.showIt = false; 
}) 

また、DOMでカスタムイベントを使用していますので、このコードを指示に入れることをおすすめします。だから、再利用も可能です。

+0

ありがとうございます、サイズ変更で動作しますが、いずれかをクリックすると、すべて表示されます。クリックごとに個別に設定し、サイズを変更する際にそれらをすべて非表示にする必要があります。 – Squirrl

+0

@Squirrlは更新された回答を試してください。 –

+1

優れた答え。私はいくつかの事を学びました。ありがとうございました。 – Squirrl

関連する問題