这是我的情景。我有一个控制器负责生成部分html,并且在同一页面中有另一个控制器来显示更多的html。是否可以将数据从一个控制器传递到另一个控制器?是否存在订阅和发布等概念?
Controller One负责处理将新数据插入数据库,并且在成功插入后,我想填充Controller Two中的列表(将新添加的项目推入Controller Two vm列表数据)。
使用angularjs可以描述场景吗?
如您所见,有一个页面包含两个独立的视图和控制器。
为了生成View 1,我利用了angular指令:
<add-new-task-section category-id="{{vm.categoryId}}"></add-new-task-section>
&#13;
我为View 1创建了服务,因此它将更新View 2列表:
(function () {
"use strict";
angular.module("app-categories")
.service('addingNewTaskService', function () {
return {
pushNewTask: function (data) {
alert("UI to be updated for category: " + data.categoryId);
}
}
});
})();
&#13;
以下是我在View 1中调用工作服务的方法:
$scope.saveNewTask = function () {
vm.newTask.categoryId = $scope.categoryId;
addingNewTaskService.pushNewTask(vm.newTask);
&#13;
一切正常,我能成功调用服务中的警报,但是如何将View 1(服务的数据对象)的vm推送到View 2 vm列表?
答案 0 :(得分:0)
是
您可以通过服务共享数据来实现此目的。 https://docs.angularjs.org/guide/services
答案 1 :(得分:0)
因此在angularjs中有订户和发布者的概念。我能够通过从View 1发布并订阅View 2来解决我的问题。我已从问题中的代码中删除了我的自定义服务,并引用了&#39; $ rootScope&#39;视图1中的角度服务。从那里我可以发布:
$rootScope.$broadcast('newTaskSent', vm.newTask);
&#13;
并在View 2中订阅:
//subscriber
$scope.$on('newTaskSent', function (event, task) {
vm.tasks.push(task);
});
&#13;