AngularJS:从另一个控制器/范围更新控制器范围

时间:2014-06-30 19:39:42

标签: angularjs angularjs-scope angularjs-service angularjs-controller

希望没有人问过..我环顾四周,但还没找到任何东西。

我有一个视图,它为用户提供了一个模态对话框(向导)来创建一些东西,然后保存它们。好像一切都在工作,除了视图使用ng-repeat列出创建的项目,并且当新项目被推入列表时它不会更新。请考虑以下示例。

app.service('Utils', function() {

});

function controller1($scope,Utils) {
    $scope.myList = [];

    Utils.add = function(obj) {
        $scope.myList.push(obj);
    }
};

function controller2($scope,Utils) {
    var temp = {"name":"John Doe"};
    Utils.add(temp);
};

这是非常基本的,但它提供了我所做的足够的洞察力。使用ng-repeat在视图中显示$ scope.myList。有时,我会显示向导,完成创建新项目的过程,然后将该项目推送到列表中。添加功能是Utils服务的一部分,用于其他目的,但这里没有必要对其进行概述。 add函数在第一个控制器中声明,可通过第二个控制器访问。创建新项目并将其推入$ scope.myList的操作正常。我可以查看第一个控制器的$ scope并看到该变量包含一个新对象,但视图永远不会更新以显示它。

有关导致视图无法更新的内容的任何想法?有一个更好的方法吗?我找到了在其他地方使用服务作为中间人的建议,但是如果有更好的方法可以解决这个问题,那么我就可以了。

1 个答案:

答案 0 :(得分:0)

不确定这是否是您要找的:

http://jsfiddle.net/5QqQ6/

    var app = angular.module('itemsApp', []);

    app.factory('Items', function () {
        var list = [{
            name: 'Apples',
            color: 'Red'
        }];

        return {
            add: function (item) {
                list.push(item);
            },

            get: function () {
                return list;
            }
        }
    });

    app.controller('List1Ctrl', function ($scope, Items) {
        $scope.items = Items.get();
        $scope.new_item = {};

        $scope.addItem = function () {
            Items.add($scope.new_item);
            $scope.new_item = {};
        }
    });

    app.controller('List2Ctrl', function ($scope, Items) {
        $scope.items = Items.get();
    });