2015-10-09 3 views
0

Моя цель - обновить значение переменной контроллера при изменении значения в службе.

vm.changeMe; 
$scope.$watch(function() { return service.value }, function(new, old) { 
    // does not have access to vm.changeMe 
}) 

Я вложил более полный пример, но мой общий вопрос: как установить переменную контроллера из обратного вызова $ watch?

https://gist.github.com/guyjacks/32498e02df732445bdfe

Я использую Угловые 1.4, и я использую синтаксис controllerAs.

+0

' vm.changeMe' должен быть доступен в ваших '' часах'. Вызывали ли ваши '$ watch'? Вы пробовали' console.log (vm .notes) '? – AWolf

+0

нет причин, по которым вы не должны иметь доступ ... предоставить демонстрационную версию, которая реплицирует проблему – charlietfl

+0

Пока она подключена в объем, вы должны иметь доступ к 'vm.changeMe' внутри вашей функции $ $. $ watch' –

ответ

0

Не используйте для этого $watch. Вам просто нужно привязать переменную контроллера к переменной службы. В контроллере, сделайте следующее:

vm.changeMe = service.value; 

Благодаря комментарий charlietfl, я буду править, чтобы сказать, что вы можете ссылаться на саму услугу в объеме, хотя я не уверен, если это рекомендуется:

vm.service = service; 

Тогда у вас будут изменения в сфере действия вместе с изменениями в сервисе.

+0

не будет работать, если это примитив ... важно отметить, что – charlietfl

+0

True. Я сделал это, но не уверен, рекомендую ли я, что касается самой службы в контроллере: vm.service = service; –

+0

, или рекомендую, что 'value' является объектом в службе – charlietfl

0

В моем приложении есть несколько контроллеров. В каждом контроллере я назначаю «это» к «VM.

var vm = this; 

У меня было несколько контроллеров, в которых я забыл объявить„VM“с„вар“

// bad 
vm = this; 

// good 
var vm = this; 

В результате» vm "в пределах $ scope. Обратный вызов $ watch ссылался на другой контроллер.

Смежные вопросы