我是Angular的新手,我試圖構建一個強大的todo應用程序用於學習目的。有可能是我做錯了一些基本的事情,但無法弄清楚。我認爲這是我配置我的控制器和模板的方式。我已經嘗試了類似問題中找到的一些建議,但沒有解決我的問題。我試過使用$scope.$apply()
,但我得到了「應用/摘要已在進行中」錯誤。在ngDialog中提交表單後,角度視圖不會更新範圍更改
我使用ngRoute,所以當有人去/profile
它調用profileController
和加載templates/profile.html
。除了設置當前用戶並附加到$rootScope
之外,此控制器不會執行任何操作。在配置文件視圖內部,我有一個名爲listController
的嵌套控制器。我將List
資源傳遞給listController
以發出http請求。就路由和獲取/發佈請求而言,一切工作都正常。
這裏是我的控制器的一個簡單的例子:
var myApp = angular.module('todo', ['ngRoute', 'ngResource'])
// config stuff...
.controller('listController', ['$scope', 'List', 'ngDialog', function ($scope, List, ngDialog) {
// This correctly returns all lists for the current user
$scope.lists = List.query();
// Open modal form function
$scope.openModal = function() {
ngDialog.open({
template: 'templates/partials/new-list.html',
className: 'ngdialog-theme-default'
});
};
$scope.createList = function() {
List.save({}, {
name: $scope.list.name,
description: $scope.list.description
}).$promise.then(function(result) {
$scope.lists.push(result);
});
};
}]);
這裏是templates/profile.html
有關部分正確地顯示從List.query()
檢索到的所有名單:
<div class="todo-sidebar" ng-controller="listController">
<h3>Your lists <a href="#" ng-click="openModal()"><span>New list</span></a></h3>
<ul>
<li ng-repeat="list in lists">
<a href="#"><span class="list-name">{{list.name}}</span></a>
</li>
</ul>
</div>
問題是,當我致電createList
功能從我的templates/partials/new-list.html
部分:
<div class="dialog-contents" ng-controller="listController">
<h3>New list</h3>
<form ng-submit="createList()">
<div class="form-group">
<label>Name</label>
<input type="text" name="name" ng-model="list.name">
<textarea name="description" ng-model="list.description" rows="10"></textarea>
<button type="submit" class="button">Create list</button>
</div>
</form>
</div>
表單發佈正確,我可以看到我的數據庫中的新列表,但該視圖不會實時更新。當我在承諾內console.log($scope)
看來,我的新列表已被添加到範圍。
我有一種感覺,將控制器附加到多個元素/模板並不是最佳實踐,但我不確定該如何構造它。
你'待辦事項,sidebar'和'對話框的contents'實際上發出兩個控制器實例及其'$ scope'是分開的。 – Shawn
請參閱我的回答下面,我已經看過了文檔,什麼可能有些幫助。 –