2016-03-13 64 views
3

我一直在反對angularJS $範圍問題猛撞我的頭。我有一個數組,我在控制器功能中更新。根據我的控制檯日誌,其中的值確實發生了變化。但是,該視圖不會更新。這裏是片段。

//array initialisation 

    $scope.fieldSuggestions = [] 

//modifying function 

    $scope.changeCurrentInput = function(fieldName, eye) { 
    for(var field in $scope.test){ 
     console.log($scope.test[field].name) 
     if($scope.test[field].name === fieldName){ 
     console.log($scope.test[field].values) 
     console.log("be4 update") 
     console.log($scope.fieldSuggestions) 
     $scope.fieldSuggestions = $scope.test[field].values; 
     console.log("after update") 
     console.log($scope.fieldSuggestions) 
     } 
    } 
    }; 

//view 

<div ng-repeat="choice in fieldSuggestions">  
    <button class="button button-positive">{{choice}}</button> 
</div> 

更多細節...

我想這可能是相關的。我有一個父視圖和幾個子視圖。每條路線都使用相同的控制器。即:routes.js中的屬性控制器對所有的都是相同的。調用修改函數的按鈕位於子視圖中,但未更新的ng-repeat位於父視圖中。

+0

如果您在列表中進行推送或拼接會發生什麼?視圖是否已更新? – Patrick

+0

@帕特里克否視圖沒有更新與推。 – tarball111

+0

您是否正在更改摘要循環中的值?你如何以及何時調用函數? – Patrick

回答

0

原來我通過聲明我的子控制器與父對象相同而隱藏父域fieldSuggestions變量。解決方法是不要在子路徑上重新聲明控制器,因爲它自動查看父路由器。

謝謝大家誰幫助。

1

由於事實上您正在改變嵌套屬性Angular不會觸發摘要。你可以簡單地解決這個問題通過增加linkcontroller功能:

$scope.$watchCollection('fieldSuggestions', function(newFieldSuggestions, oldFieldSuggestions) { 
    $scope.fieldSuggestions= newFieldSuggestions; 
}); 

事情指出:這可能不是最優化的大集合和複雜的對象。

+0

我在哪裏添加這個?嘗試了幾個景點沒有成功。你確定我在「改變嵌套屬性」嗎?我沒有修改$ scope.test,我正在修改$ scope.fieldSuggestions。 – tarball111

+0

在你的'controller' /'link'函數中有指令。 – masterspambot

+0

謝謝你的時間,但它似乎沒有工作。我將其添加到我的控制器功能中。 ('examWriteCtrl',[]).controller('examWriteCtrl',['$ scope',... – tarball111

0

我認爲是因爲嵌套更改,它無法更新當時的值。您可以使用$ scope。$ apply()獲取最新的更新值 像.... $ scope。$ apply($ scope.fieldSuggestions = $ scope.test [field] .values);

+0

)我得到$ apply已經與你的線路進行中。 – tarball111