如何从另一个控制器更新控制器的viewModel数据

时间:2016-08-23 18:31:59

标签: angularjs

这是我的情景。我有一个控制器负责生成部分html,并且在同一页面中有另一个控制器来显示更多的html。是否可以将数据从一个控制器传递到另一个控制器?是否存在订阅和发布等概念?

Controller One负责处理将新数据插入数据库,并且在成功插入后,我想填充Controller Two中的列表(将新添加的项目推入Controller Two vm列表数据)。

使用angularjs可以描述场景吗?

更多细节,这是我的拥有: enter image description here

如您所见,有一个页面包含两个独立的视图和控制器。

为了生成View 1,我利用了angular指令:



<add-new-task-section category-id="{{vm.categoryId}}"></add-new-task-section>
&#13;
&#13;
&#13;

我为View 1创建了服务,因此它将更新View 2列表:

&#13;
&#13;
(function () {

    "use strict";

    angular.module("app-categories")
    .service('addingNewTaskService', function () {

        return {
            pushNewTask: function (data) {
                alert("UI to be updated for category: " + data.categoryId);
            }
        }

    });
})();
&#13;
&#13;
&#13;

以下是我在View 1中调用工作服务的方法:

&#13;
&#13;
        $scope.saveNewTask = function () {

            vm.newTask.categoryId = $scope.categoryId;

            addingNewTaskService.pushNewTask(vm.newTask);
&#13;
&#13;
&#13;

一切正常,我能成功调用服务中的警报,但是如何将View 1(服务的数据对象)的vm推送到View 2 vm列表?

2 个答案:

答案 0 :(得分:0)

您可以通过服务共享数据来实现此目的。 https://docs.angularjs.org/guide/services

答案 1 :(得分:0)

因此在angularjs中有订户和发布者的概念。我能够通过从View 1发布并订阅View 2来解决我的问题。我已从问题中的代码中删除了我的自定义服务,并引用了&#39; $ rootScope&#39;视图1中的角度服务。从那里我可以发布:

&#13;
&#13;
$rootScope.$broadcast('newTaskSent', vm.newTask);
&#13;
&#13;
&#13;

并在View 2中订阅:

&#13;
&#13;
        //subscriber
        $scope.$on('newTaskSent', function (event, task) {            
            vm.tasks.push(task);
        });
&#13;
&#13;
&#13;