Хочу делать так чтоб обновления Сервиса изменились в контролере, без $broadcast.
Попробовал делать так, но результатa 0
//Controller 1
$scope.tpl = MyService.getTemplate();
$scope.$watch($scope.tpl, function(oldValue, newValue){
$scope.tpl = newValue;
});
//Controller 2
MyService.setTemplate('template1');
//Service
var template = 'template';
var setTempale = function(tpl)
{
tempalate = tpl;
}
var getTempale = function()
{
return template;
}
в сервисе наверняка изменяется но в Controller 1 остается прежнее значение.
Ответ
Если я всё правильно понял, то должно быть что-то вроде этого:
$scope.$watch(
function() {
return MyService.getTemplate();
}, function(oldValue, newValue) {
$scope.tpl = newValue;
}
);
Первый аргумент функции $watch должен быть либо строкой, по которой будет определено имя наблюдаемого свойства в $scope, либо функция, которая будет возвращать наблюдаемое значение при каждом dirty check. В вашем случае как раз нужно сделать функцию.
Комментариев нет:
Отправить комментарий