2013-10-04 48 views
0

我在AngularJS中遇到了一個問題,其中$scope.$watchCollection()會引發錯誤。我已經減少了我的代碼到它是完全一樣的文檔示例代碼(http://docs.angularjs.org/api/ng $ rootScope.Scope#$ watchCollection)的點,並且錯誤仍然拋出:

function OverviewCtrl($scope) { 
    $scope.names = ['igor', 'matias', 'misko', 'james']; 
    $scope.dataCount = 4; 

    $scope.$watchCollection('names', function(newNames, oldNames) { 
    $scope.dataCount = newNames.length; 
    }); 
} 

我得到的錯誤

'undefined' is not a function (evaluating '$scope.$watchCollection('names', function(newNames, oldNames) { 
    $scope.dataCount = newNames.length; 
})') 

我不知道這個問題可能是什麼。我正在做什麼文檔說,除了我把它放在一個控制器,但它似乎這個代碼旨在用於控制器。那麼這裏有什麼問題?

+1

你使用什麼版本的角? '$ watchCollection'是一個相當新的功能。 –

+0

1.0.6。最新的穩定版本似乎是1.0.8。 – mcv

+0

升級到1.2.0-RC2似乎有伎倆。還必須明確包含routeProvider才能使應用程序正常工作。 (我想知道這是否意味着我可以完全放棄routeProvider;我真的不希望我的視圖直接綁定到url) – mcv

回答

4

你也可以使用下面的語法:

$scope.$watch('myCollection', function(value, oldValue) { 
    // insert awesome code here 
}, true); 

true參數告訴AngularJS爲 「deepwatch」 的值。

+0

它看多深?基本上有兩件事情我感興趣:是否有任何元素添加到列表中,並且列表中的每個元素都有一些我感興趣的屬性,但不是全部。所以我計劃一個淺的'$ watchCollection',然後爲每個元素添加一些特定的$ watch('item.name')'和一個深層的$ watch('item.sublist',function,true)'。或者一個深度手錶的表現會更好? – mcv

+0

關鍵是:你爲什麼不使用深度手錶?它會回答你的需求(同時觀察數組的長度和數組的內容),但可能會導致一些陷阱。深度監視的主要不便之處在於其對巨大對象或陣列的糟糕表現,以及它可能導致多餘的消化週期並導致應用程序崩潰。 – LoremIpsum

+0

我的模型可能會相當大。並非所有東西都需要經常檢查。但更重要的是,如果我深入觀察所有事情,並且有所改變,我仍然不知道究竟發生了什麼變化,是嗎?所以我需要再次手動檢查一切。我認爲,這對我來說完全沒用。除了item.sublist;如果有任何改變,我將重新繪製整個事情。 – mcv