Да, я знаю, что этот вопрос задан, но у меня все еще есть проблемы, следуя инструкциям здесь.
У меня два контроллера и вы хотите поделиться одним простым объектом через службу следующим образом:
var app = angular.module('plunker', []);
app.controller('CtrlOne', function($scope,DataSrvc) {
$scope.data={
var1:'controller1 var one',
var2:'controller1 var two'
};
$scope.$on('name',function(){
DataSrvc.var1=$scope.data.var1;
DataSrvc.var2=$scope.data.var2;
});
})
.controller('CtrlTwo',function($scope,DataSrvc){
$scope.data=DataSrvc;
});
app.factory('DataSrvc',function(){
return {
var1:'',
var2:''
}
});
Я хочу, чтобы контроллер 2 автоматически обновлял объект, когда контроллер 1 менял его. Но что я сделал здесь неправильно? пожалуйста, порекомендуйте.
здесь http://plnkr.co/edit/LO0qQfyV94A9YEBLsk2R?p=preview код
Если вы хотите делиться некоторыми данными между ними и обновлять, вам даже не нужны дополнительные слушатели, и вам даже не нужна фабрика. Достаточное хранение значений. Вы можете сделать это:
var app = angular.module('plunker', []);
app.value('DataSrvc',{var1:"value 1",var2:"value 2"});
app.controller('CtrlOne', function($scope,DataSrvc) {
$scope.data = DataSrvc;
})
app.controller('CtrlTwo',function($scope,DataSrvc){
$scope.data=DataSrvc;
});
Я обновил плункер: http://plnkr.co/edit/yCqmHMaH6ev9CA2HwQE1?p=preview
Вы можете использовать шаблон наблюдателя. Наблюдение за вашим сервисом и регистрация обратных вызовов для уведомления наблюдателей. Используя этот метод, вы можете подписаться на своих подписчиков на свою службу, добавив сеттер для ваших переменных, который затем уведомит всех ваших наблюдателей (ваших контроллеров).
app.controller('CtrlOne', function($scope,DataSrvc) {
$scope.data={
var1:'controller1 var one',
var2:'controller1 var two'
};
$scope.$on('name',function(){
DataSrvc.setVar1=$scope.data.var1;
DataSrvc.setVar2=$scope.data.var2;
});
})
.controller('CtrlTwo',function($scope,DataSrvc){
$scope.var1=DataSrvc.getVar1;
$scope.var2=DataSrvc.getVar2;
DataSrvc.subscribe(function() {
$scope.var1=DataSrvc.getVar1;
$scope.var2=DataSrvc.getVar2;
});
});
app.factory('DataSrvc',function(){
var callbacks = [];
var var1 = '';
var var2 = '';
return {
setVar1: setVar1,
setVar2: setVar2,
getVar1: getVar1,
getVar2: getVar2,
subscribe: subscribe
}
////////////////
function getVar1() {
return var1;
}
function getVar2() {
return var2;
}
function setVar1(newVar1) {
var1 = newVar1;
notify();
}
function setVar2(newVar2) {
var2 = newVar2;
notify();
}
function subscribe(callback) {
callbacks.push(callback);
}
function notify() {
for(var i = 0; i < callbacks.length; i++ ) {
callbacks[i]();
}
}
});