2016-08-21 70 views
0

嗨,朋友我是新角度和陷入創建一個$watch功能的例子卡住。我只是想將數據推送到現有的模態(json數據)中,模型中的變化將反映到view中。請檢查我下面的代碼或檢查fiddle here

SCRIPT

var list = [{ 
         name: 'Jon', 
         joining_date:'2015-10-23', 
         age: 23 
        }, 
        { 
         name:'Viki', 
         joining_date:'2015-01-24', 
         age: 20 
        }, 
        { 
         name: 'Abc', 
         joining_date:'2015-10-25', 
         age: 43 
        }, 
        { 
         name: 'XYZ', 
         joining_date:'2015-10-21', 
         age: 21 
       }]; 


var empApp = angular.module('emp-list', []); 
empApp.controller('emp-table',function($scope){ 
    $scope.data = list; 

    $scope.dateFormate = function(joinDate){ 
     return new Date(joinDate) 
    } 
     // PUSHING DATA IN EXISTING MODAL 
     setInterval(function(){ 
      $scope.data.push({name: 'XYZ', joining_date:'2015-10-21',age: 21}) 
     }, 1000); 
     // USING $WATCH FUNCTION 
     $scope.$watch('data'); 
}) 

回答

1

setInterval是角的範圍之外,因此認爲是unawre的更改。使用角度內置$interval,像這樣:

empApp.controller('emp-table',function($scope, $interval) { 

$interval(function(){ 
     $scope.data.push({name: 'XYZ', joining_date:'2015-10-21',age: 21}) 
    }, 1000); 

現在,關於你的$watch表達 - 它當前正在觀看數據,它所做的任何更改。使用setInterval$watch不會注意到列表上發生的任何更改。切換到$interval$watch可以自由使用:

$scope.$watch('data', function(newValue, oldValue) { 
    console.log("current data: " + newValue); 
}); 
0

在使用setInterval的問題是正確的,但不完整。 $ scope。$ watch表達式通過引用來檢查屬性$ scioe.data,因爲Array.prototype.push改變了數組 - 引用不是變化,$ scope。$ watch沒有檢測到任何變化。爲了克服這個問題,您需要第三個參數傳遞給$腕錶方法 - 深檢查:

$scope.$watch('data', function(newValue, oldValue) { 
    console.log("current data: " + newValue); 
}, true); 

或者你也可以改變$ scope.data參考(此選項較少的性能成本) 例如:

$interval(function(){ 
    $scope.data = $scope.data.concat({name: 'XYZ', joining_date:'2015-10-21',age: 21}); 
}, 1000);