2013-06-12 87 views
3

我有一個服務的創建功能,它負責輸入數據,將其轉換爲資源,執行保存並將其插入本地緩存中。AngularJS array.push ng:重複不更新

create = (data, success, error) -> 
    throw new Error("Unable to create new user, no company id exists") unless $resource_companies.id() 

    # create the resource 
    new_model = new resource(data) 

    # manually add the company id into the payload (TODO: company id should be inferred from the URL) 
    new_model.company_id = $resource_companies.id() 

    # do the save and callbacks 
    new_model.$save(() -> 
     list.push(new_model) 
     success.call(@) if success? 
    , error) 

我的問題是,一個ng:重複觀看列表變量沒有得到更新。據我所知,這不是在AngularJS之外發生的,所以它不需要$ scope。$ apply()來保持它是最新的(事實上,如果我嘗試觸發一個摘要,我會得到一個摘要已經在進行中錯誤)

什麼是非常奇怪的是,我有這個完全相同的模式在別處沒有問題。

使用我的控制器訪問列表數組的代碼是(這是在服務)

# refreshes the users in the system 
refresh = (cb) -> list = resource.query(() -> cb.call(@) if cb?) 

在控制器:

$scope.users = $resource_users.refresh() 
+0

我對此加了一些調試。在array.push發生後,我可以看到摘要被調用,但在應該指向數組引用的$ scope.users中,仍然報告數組中的舊項。 這就像不知何故數組引用沒有正確傳遞。 – Samuel

+0

$ scope.users指向數組中的引用嗎?怎麼會這樣? – Sharondio

+0

$ scope.users通過刷新函數指向服務中的數組變量「list」。列表在服務範圍內,以便刷新和創建方法都可以達到它。 – Samuel

回答

0

這可能是因爲您分配一個新的參考。 Angular正在觀看舊的參考文獻,而且它永遠不會改變。這裏是其中參考替換:

list = resource.query(/* ... */) 

相反,如果你做的列表中的對象的屬性,棱角分明的NG-重複手錶應該是能夠觀察到的data對象的list性質的變化:

data.list = resource.query(/* ... */)