2016-06-20 4 views
0

いくつかの値を含む1つのサービスを作成しました。私はそのサービスに2つのコントローラーを取り込みました。
問題は、最初のコントローラがその中のすべてのデータを参照することです。
しかし、2番目のコントローラは空の値だけを表示します。
サービスはシングルトンなので、両方で見ることができます。
ここで何か間違っていますか?複数のコントローラで注入サービスが値を共有しないのはなぜですか?

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

問題を再現するためのライブデモを投稿できますか? – elclanrs

+0

このサービスは何も返されないと思いますか? – abdoutelb

+1

'['$ scope'、 'MyModel'、function($ scope、MyModel){'行方不明です。 – Jai

答えて

0

まず、コード自体でthis.items = [];を初期化しています。 両方のコントローラでは、サービス参照(vm.MyModel = MyModel;)を割り当てています。ここでは、vm.MyModelに割り当てられている1つの空の配列を持つサービスです。例えば

:シングルトンのデザインパターンでは、この

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] 
}]); 

DOの唯一のオブジェクトが作成され、同じことがそれを求めるすべての人のために共有されています。この場合、SERVICEを任意のコントローラーに挿入すると、そのSERVICEの参照がそのコントローラーに渡されます。したがって、いずれかのコントローラからのSERVICEオブジェクトに変更があった場合、他のコントローラにも反映されます。

+0

彼が配列への参照をキャッシュしていない限り。 –

関連する問題