我正在使用带有侧边栏(在index.html上)的SPA的角度路由,该边栏从categoryListController加载一个类别列表,categoryListController注入了categoryData $ resource服务以检索类别列表。
然后我有一个模板addCategory.html,它在addCategoryController的帮助下添加了一个类别,它也使用了categoryData $ resource服务。
$scope.categories = categoryData.query(); //categoryListController (for sidebar)
categoryData.save(newCategory) // on addCategoryController (for addCategory.html)
问题是,除非我刷新整个页面,否则侧边栏不会更新。我想我必须以某种方式告诉categoryListController刷新,但我不知道该怎么做。我可以在categoryData.save(newCategory)之后立即执行$ scope.categories.push(newCategory),并在addCategory.html上立即显示新类别,但我不认为这是我的侧边栏的答案,除非这是某些东西需要用$ rootscope处理?我不确定。感谢
答案 0 :(得分:1)
您可以在此处更新categoryListController
中的类别列表的方法之一是使用$rootScope
来广播详细说明所添加类别的邮件。
在列表控制器中捕获此消息,以便从服务器再次获取列表,或使用新添加的项目使用广播消息发送到列表。
添加控制器中的类似内容
$rootScope.$broadcast('categoryAdded', { 'category': newcategoryObject });
列表控制器中的这样的东西
$scope.$on('categoryAdded', function (event, args) {
$scope.categories.push(args.category);
});
您可以将$ rootScope作为依赖项注入控制器。
您也可以通过创建CategoryList
服务来执行类似的操作。由于服务本质上是单一的,并且可以跨控制器共享,因此使用服务方法,您将定义CategoryList
服务,其方法为get
和“添加”类别,并绑定到此服务返回的数据。 / p>
答案 1 :(得分:0)
您应该创建一个共享数据结构并管理内容的service
。
这样的事情:
angular.service('categoryService', function() {
var categories = [], initilized;
return {
this.getCategories = function() {
if (!initialized) {
// call resource to fulfill the categories array
initialized = true;
}
// you cold return a promise that would be resolved as soon
// as you get the first response from server
return categories;
});
this.addCategory = function(category) {
// code to call $resource, add the category and update the
// categories array, shared between both controllers
//
// you could return the promise for adding the content
});
this.removeCategory = ...
};
});
您甚至不需要致电$resource
,此服务可以满足任何持久性需求。当然,如果需要公开承诺,可以更改并添加更多方法。