为什么在多个控制器中注入服务并不共享值?

时间:2016-06-20 09:55:28

标签: javascript angularjs angular-services

我创建了一个包含一些值的服务,我填充它并导入两个控制器 问题是第一个控制器看到其中的所有数据 但是第二个控制器只看到空值 由于服务是单身,因此它应该在两者中都可见。
我在这里做错了吗?

app.service("MyModel", ['$filter', function ($filter) {
    this.items = [];
}]);
app.controller('FirstController', ['$scope', 'MyModel', function ($scope, MyModel) {
    var vm = this;
    vm.MyModel = MyModel;
}]);
app.controller('SecondController', ['$scope', 'MyModel', function ($scope, MyModel) {
    var vm = this;
    vm.MyModel = MyModel; // empty (like a new instance)
}]);

1 个答案:

答案 0 :(得分:0)

首先,在您的代码本身中,您正在初始化this.items = []; 在两个控制器中,您都分配服务引用(vm.MyModel = MyModel;)。这里您的服务有一个空数组,分配给vm.MyModel。

例如:DO this

app.controller('FirstController', ['$scope', 'MyModel', function ($scope, MyModel) {
    var vm = this;
    MyModel.items = [1,2 3, 4];
}]);
app.controller('SecondController', ['$scope', 'MyModel', function ($scope, MyModel) {
    var vm = this;
    console.log(MyModel.items); \\ it will print array [1, 2, 3, 4]
}]);

在Singleton设计模式中,只创建一个对象,并为所有要求它的人共享同一个对象。在这种情况下,当您将SERVICE注入任何控制器时,该SERVICE的引用将传递给该控制器。因此,如果任何控制器的SERVICE对象发生任何变化,它也会反映在其他控制器中。