2016-11-04 7 views
0

チェックボックスをクリックすると、$scope.$watchCollection('classes'は起動しません。助言がありますか?チェックボックスの切り替え時にng-modelのwatchCollectionが起動しない

<div class="filter-column"> 
    <div class="filter-title">Class</div> 
    <div class="bottom-line"></div> 
    <div class="overflow-container"> 
     <div ng-repeat="class in classes | orderBy"> 
     <input type="checkbox" 
      ng-model="class.checked" > 
     {{class.description}} 
     </div> 
    </div> 
    </div> 

$scope.$watchCollection('classes', function(newValue) { 
    console.log('sss') 
}); 
+0

私は$ scope.classesを変更しようとしていないと思う$ 'watchCollection'は、 –

+0

チェックボックスを切り替えると、 'ng-model =" class.checked "と値が設定されます。' – dman

答えて

1

あなたのコードを修正するには、Deep Watchコレクションの@Sajeetharanからの回答に従ってください。しかし、私はあなたのケースでは、イベントをキャプチャするためにあなたのケースで使用する必要があると思う

<input type="checkbox" ng-model="class.checked" ng-change="chkChecked(class);"> {{class.description}} 
+0

ng-changeはまさに私が使い終わったものです。私はそれが角の練習に反対していたかどうかは分かりませんでした。 – dman

1

あなたはその場合のdeepwatchを持つことができ、

$scope.$watch(function($scope) { 
     return $scope.classes. 
     map(function(obj) { 
     return obj.checked 
     }); 
    }, function(newVal) { 
     $scope.checked = true; 
     alert("css chagned"); 
    }, true); 

DEMO

+0

は 'watchCollection'と同じことをしませんか? – dman

1

// Code goes here 
 

 
angular 
 
    .module('myApp', []) 
 

 
.controller('testController', ['$scope', 
 
    function($scope) { 
 

 
    $scope.classes = [{ 
 
     description: 'label1', 
 
    }, { 
 
     description: 'label2', 
 
    }]; 
 

 
    $scope.$watch('classes', function(newValue) { 
 
     console.log("watcher called"); 
 
    }, true); 
 

 
    } 
 
]);
<!DOCTYPE html> 
 
<html data-ng-app="myApp"> 
 

 
<head> 
 
    <link rel="stylesheet" href="style.css"> 
 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script> 
 
    <script src="script.js"></script> 
 
</head> 
 

 
<body data-ng-controller="testController"> 
 

 
    <div class="filter-column"> 
 
    <div class="filter-title">Class</div> 
 
    <div class="bottom-line"></div> 
 
    <div class="overflow-container"> 
 
     <div ng-repeat="class in classes | orderBy"> 
 
     <input type="checkbox" ng-model="class.checked" ng-change="call(class)">{{class.description}} 
 
     </div> 
 
    </div> 
 
    </div> 
 

 
</body> 
 

 
</html>

$ watchは変更を取得できます。

+0

理由を参照してください... http://stackoverflow.com/questions/26393148/why-does-scope-watch-work-but-scope-watchcollection-does-not –

関連する問題