我创建了一个包含一些值的服务,我填充它并导入两个控制器
问题是第一个控制器看到其中的所有数据
但是第二个控制器只看到空值
由于服务是单身,因此它应该在两者中都可见。
我在这里做错了吗?
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)
}]);
答案 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对象发生任何变化,它也会反映在其他控制器中。