2015-07-05 24 views
1

控制器:角watchCollection絕對行不通

app.controller('SettingsController', function ($scope, $http) { 

    $scope.openingtimes = { 
     "times": [ 
     {"id":1,"day":1,"name_of_day":"Pondělí","open_from":"13:00","open_to":"16:00"}, 
     {"id":2,"day":1,"name_of_day":"Pondělíadas","open_from":"13:00","open_to":"16:02"}, 
     {"id":3,"day":1,"name_of_day":"Pondělí","open_from":"13:00","open_to":"16:00"}, 
     {"id":4,"day":1,"name_of_day":"Pondělísf","open_from":"13:00","open_to":"16:00"} 
     ]}; 

    $scope.$watchCollection('openingtimes.times', function() { 
     console.log("work"); 
    }); 

}); 

VIEW:

<div class="angular" ng-controller="SettingsController"> 

<div ng-repeat="time in openingtimes.times"> 

    <input type="text" ng-model="time.name_of_day"/> {{ time.name_of_day }} : {{ time.open_from | openingTime }} - {{ time.open_to | openingTime }} 

</div> 

當我輸入到輸入模式正在改變監守我在這裏看到的一切工作正常:{ {time.name_of_day}}但控制器不記錄任何東西!我嘗試了幾乎所有東西,但仍然沒有任何東西......我在控制檯中只有一個日誌「工作」,它在刷新頁面後。但絕對改變模式後一無所獲......

回答

2

這是因爲你的對象的結構 - 你有對象的數組的對象......而$watchCollection執行以下操作:

淺手錶的性能一個對象,並在任何屬性發生變化時觸發(對於數組,這意味着要觀看數組項;對於對象映射,這意味着要看屬性)。

excerpt from here

最簡單的方案可能只是來設置陣列中的每個對象$watchCollection

angular.module('app', []) 
 
.controller('SettingsController', function ($scope, $http) { 
 

 
    $scope.openingtimes = { 
 
     "times": [ 
 
     {"id":1,"day":1,"name_of_day":"Pondělí","open_from":"13:00","open_to":"16:00"}, 
 
     {"id":2,"day":1,"name_of_day":"Pondělíadas","open_from":"13:00","open_to":"16:02"}, 
 
     {"id":3,"day":1,"name_of_day":"Pondělí","open_from":"13:00","open_to":"16:00"}, 
 
     {"id":4,"day":1,"name_of_day":"Pondělísf","open_from":"13:00","open_to":"16:00"} 
 
     ]}; 
 

 
    for(var i in $scope.openingtimes.times) { 
 
     $scope.$watchCollection('openingtimes.times[' + i + ']', function() { 
 
     console.log("work"); 
 
     }); 
 
    } 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div class="angular" ng-app="app" ng-controller="SettingsController"> 
 
<div ng-repeat="time in openingtimes.times"> 
 

 
    <input type="text" ng-model="time.name_of_day"/> {{ time.name_of_day }} : {{ time.open_from }} - {{ time.open_to }} 
 

 
</div>

或者,如果你使用1.3角+,您可以改爲使用$watchGroup