2014-05-07 59 views
1

我有一個簡單的js數組被一個角度工廠檢索,注入一個控件,觀察,然後在ui-router管理的視圖狀態中使用ng-repeat在表中顯示。

起初我想要訂閱使用$ watchCollection這陣...

self.$watchCollection(self.Data, function(newData, oldData){ 
    self.total = newData.length; 
}); 

然而,當我最初加載應用程序,這只是運行。我發現訂閱正在運行的集合的唯一方法是使用返回相關數組的匿名函數。

self.$watchCollection(function() { return self.Data }, function(newData, oldData){ 
    self.totalWatchedWithAnonFunc = newData.length; 
}) 

查看這一切http://plnkr.co/edit/L7mycl

一切從我讀,所有我應該需要一個有效的訂閱做的是數組本身,而不是一個匿名函數返回數組中傳遞。

我之所以包含ui-router是因爲我的實際應用程序正在大量使用它,我想盡可能地模擬我的環境,以便如何設置事物。

我不理解什麼?我可以做不同的事情嗎?

謝謝。

+0

根據stevuu的建議更新:http://plnkr.co/edit/L7mycl – beauXjames

回答

1

您是否在尋找self.$watchCollection("Data", ...)而不是self.$watchCollection(self.Data, ...)?試試看!請參閱docs以瞭解原因:第一個參數是在作用域上評估的字符串,或者是一個函數,它使範圍返回您想要觀察的內容。

+0

作爲字符串的屬性名稱?!?!我很震驚,這是解決方案...甚至沒有範圍?這是一個瘋狂的新領域......感謝迅速的迴應。 – beauXjames

+1

在AngularJS中,評估字符串是一個反覆出現的事情,比如'ngRepeat','ngInit','ngInclude'等等都採用在當前範圍上評估的表達式。與其他語言/框架相比,它有點奇怪,但是當你習慣它時,它非常強大! –

相關問題