2012-11-26 4 views
2

Я в директиве, и я хотел бы сделать объединение $watch на переменной, которая существует на локальном $scope и том, что существует на $rootScope. Это будет выглядеть примерно так:

myapp.directive('cohnbread', 
      ['TEMPLATE_URL', '$rootScope', 
    function(TEMPLATE_URL, $rootScope) { 
     return { 
      templateUrl: TEMPLATE_URL + "cohnbread.html", 
      scope: { odp: '@' }, 
      link: function(scope, elem, attrs) { 
       // here I would like to register a callback to fire 
       // whenever scope.bar or $rootScope.foo fires. Something like: 
       $watchBoth('scope.bar', '$rootScope.foo', onBarOrFooChange); 
      } 
     }; 
    }]); 

Есть ли обходной путь, чтобы это произошло?

Отредактировано для предоставления дополнительной информации.

+1

Что вы пытаетесь сделать в $ смотреть? Где вы устанавливаете $ watch? Служба, которая выполняет обратный вызов $ watch как функцию, может работать ... но вы на самом деле не дали нам достаточно информации, чтобы ответить на вопрос (если кто-то не повезет). –

+0

Могу ли я спросить, почему у вас есть две переменные с тем же именем и почему они нуждаются в наблюдении? Если у них действительно есть отдельные цели, тогда назовите их соответственно, если вы не должны заботиться только о более конкретной переменной области –

+0

@LiviuT., У них нет одинакового имени. Это отдельные переменные в отдельных областях. –

ответ

1

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

scope.$watch('bar', onBarOrFooChange); 
scope.$watch('foo', onBarOrFooChange); 

или если директива имеет изолированный объем, вы можете настроить в $watch для foo как это:

scope.$watch(function() {return $rootScope.foo}, onBarOrFooChange); 
Смежные вопросы