$rootsScope.$watch не запускается
У меня установлены часы в службе (фрагмент кода ниже), и я не могу понять, почему они не срабатывают. Аналогичные часы, установленные в контроллере (с использованием $Scope.$ Watch), запускаются при изменении объекта.
Что мне не хватает?
(function() {
'use strict';
angular
.module('evidentia')
.service('srcPaneSvc', SourcePaneSvc);
SourcePaneSvc.$inject = ['$rootScope', '$timeout', 'dataProvider', 'dialogSvc', 'attachSvc'];
function SourcePaneSvc($rootScope, $timeout, dp, ds, attachSvc) {
var svc = this;
svc.status =
{
isDirty : false,
disabled : true,
original : null
};
svc.attachSrc = attachSrc;
svc.cloneSource = cloneSource;
svc.deleteSource = deleteSource;
svc.dirty = dirty;
svc.editAttachment = editAttachment;
svc.linkOriginal = linkOriginal;
svc.newSource = newSource;
svc.openAttach = openAttach;
svc.openEditor = openEditor;
svc.saveSource = saveSource;
svc.showTemplates = showTemplates;
svc.srcBox = openFSSrcBox;
svc.openSrcDetail = openSrcDetail;
svc.unattach = unattach;
svc.unlink = unlink;
$rootScope.$watch('dp.source', onSourceChange, true);
function onSourceChange() {
if (dp.source.id) {
...
Этот код срабатывает...
(function() {
'use strict';
angular
.module('evidentia')
.controller('rightSidebarCtrl', RightSidebarCtrl);
RightSidebarCtrl.$inject = ['$scope', '$window', '$timeout', '$location', 'dataProvider', 'syncSvc'];
function RightSidebarCtrl($scope, $window, $timeout, $location, dp, ss) {
var vm = this;
vm.online = false;
vm.auth = ss.isAvailable();
vm.srcMode = true;
vm.srcFilter = '';
vm.wrapStyle = (dp.GO.wrap ? {'white-space': 'normal'} : {'white-space': 'nowrap'});
vm.collapse = collapse;
vm.toggleSrc = toggleSrc;
vm.subClick = subClick;
vm.srcClick = srcClick;
vm.refClick = refClick;
$scope.$watch('dp.source', function () {
_ev.dbg('RightSiderBarCtrl: source changed.');
...
1 ответ
Решение
Для меня это выглядит так, как будто переменная, которую вы хотите просмотреть, не находится в области видимости AngularJs, и, насколько я знаю, она не будет работать в этом случае. Смотрите этот вопрос для объяснения.
Что вам нужно сделать, это запустить цикл дайджеста, чтобы заставить его работать.
РЕДАКТИРОВАТЬ:
Добавление в сферу должно решить проблему:
$rootScope.db = db;