我構建了一個簡單的Angular測試應用程序,並遇到了問題。我有一個項目清單和列表底部的「添加項目」鏈接(該清單存儲在一個簡單的NodeJS服務器上)。這個「添加項目」鏈接加載一個子視圖,讓用戶設置新項目的名稱。當用戶點擊完成後,該項目被添加到服務器上的列表中,然後告訴父級列表進行更新。在控制檯中,我可以看到數據正在傳回給父級,但視圖並未反映新的項目列表。我已經看過$ scope。$ apply但是因爲我從來沒有使用過第三方庫我沒有理由使用它(我試過了,它總是給出錯誤「$ digest is already running」在文檔中)。這裏是有問題的代碼:Angular JS - 父視圖在範圍更改時不更新
HTML父列表
<ul data-ng-controller="listCntrl">
<li data-ng-repeat="item in items">
<a href="#/item/{{item.name}}">{{item.name}}</a>
</li>
<li><a href="#/new">Add Item</a></li>
</ul>
<div data-ui-view></div> <!--Child view loaded here-->
HTML子視圖
<div data-ng-controller="newItemCntrl">
<input type="text" data-ng-model="name"></input>
<a data-ng-click="addItem()">Done</a>
</div>
控制器
app.controller('listCntrl',function($scope, ListFactory){
ListFactory.getItems().success(function(data){
$scope.items = data;
});
$scope.update = function(){
ListFactory.getItems().success(function(data){
console.log(data); //The correct list is in data
$scope.items = data; //This doesn't cause the view to update!
});
}
});
app.controller('newItemCntrl',function($scope){
$scope.addItem = function(){
$http({
method: 'POST',
url: '/addItem',
data: JSON.stringify({name: $scope.name}),
headers: {'Content-Type': 'application/json'},
})
.success(function(){
$scope.$parent.update();
});
}
});
廠
app.factory('ListFactory', function($http){
return {
getItems: function(){
return $http({
method: 'POST',
url: '/getItems',
headers: {'Content-Type': 'application/json'}
});
}
}
});
一切工作在服務器端,並在它打印出的更新列表,update()函數,但不知何故$ scope.items分配不會導致列表視圖進行更新。如果我刷新頁面,則列表顯示正確。我在這裏做錯了什麼?我猜這是我對$ scope的理解問題。$ parent但我似乎無法弄清楚。感謝您的幫助!
謝謝!這解決了問題! – ORL
這是個好主意。我不明白「更新」功能如何被調用,儘管... –
我認爲他通過其他方式運行'update'方法,而不是通過'addItem'方法。 –