2015-12-15 4 views
0

В мой контроллер директивы У меня есть $ часы, как это:

$scope.$watch(function() { 
    return service.abc; 
}, function(newVal, oldVal) { 
    $scope.abc = {abc: newVal}; 
}); 

Я заметил, что у меня возникли проблемы с этой переменной становится неопределенным, когда используется в других контроллеров. Я создал еще один часы:

$scope.$watch('abc', function() { 
    console.log($scope.abc); 
}); 

С этими часами я вижу, что объект абв становится определенной со значением от службы, но потом становится неопределенным. Я уверен, что я нигде не изменяю этот объект. Даже если я установил

$scope.abc = {abc: angular.copy(newVal)}; 

для обеспечения того, чтобы объект не изменялся, он по-прежнему становится неопределенным. Я попытался использовать синтаксис vm controllerAs и попробовать разные имена переменных, чтобы убедиться, что он не изменяется, но он все еще не определен. Что происходит? Мне нужно передать этот объект в директиву и иметь возможность модифицировать его из этого родительского контроллера и иметь внутренний контроллер-указатель, отражающий изменения.

ответ

0

Прежде всего, переменные области видимости в контроллерах или директивах необходимо инициализировать каждый раз, когда запускается контроллер или директива.

Похоже, вы хотите использовать переменные, установленные в сервисах, что должно быть хорошо, потому что они являются одноточиями, и значения будут сохраняться со страницы на страницу в течение всего срока службы приложения.

Часы предназначены для просмотра области видимости переменных в контроллерах и директивы поэтому при использовании:

$scope.$watch('abc', function() { 
    console.log($scope.abc); 
}); 

Вы смотрите переменную область с именем аЬса в контроллере/директиве. Если вы не инициализируете abc в своем контроллере/директиве, тогда эти часы никогда не будут запущены.

Кроме того, убедитесь, что вы используете этот синтаксис для определения часов в контроллерах/директивах:

$scope.$on('$destroy', $scope.$watch('abc', function (newVal, oldVal) { 
    if (newVal != oldVal) { 
     // do something here 
    } 
})); 

Это определение предотвращает часы от запуска несколько раз, если вы ввели страницы, выход и повторный ввод стр. Часы определяются несколько раз, но не уничтожаются.

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