2013-06-06 3 views
3

Можете ли вы привязать директиву к свойству геттера на службе с помощью AngularJs?AngularJs Связывающие директивы к свойствам геттера

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

Вот моя директива:

authorization.directive("authorization", ["$rootScope", "authenticationService", "authorizationService", function ($rootScope, authenticationService, authorizationService) { 
return { 
    restrict: "A", 
    link: function (scope, element, attrs) { 
     var prevDisp = element.css("display"); 

     function update(user) { 
      if (!authorizationService.isAuthorized(attrs.authorization, user)) { element.css("display", "none"); } 
      else { element.css("display", prevDisp); } 
     } 

     scope.$watch(authenticationService.user, function() { update(authenticationService.user); }); 
    } 
}; 

}]);

Вот версия урезывание моей службы:

App.factory("authenticationService", function ($http, $location) { 
var _user = { email: null, ...... }; 

return { 
    get user() { return _user; }, //This is the property I am trying to bind too 
    login: function() { do stuff }, 
    logout: function() { do other things } 
} 

});

+0

Вы пробовали использовать третий параметр '$ watch()'? Передайте true в качестве третьего параметра, а затем проверьте, запущен ли ваш '$ watch()' или нет ... – callmekatootie

ответ

4

Вы либо смотрите фактическую функцию (это вызываемая вещь), либо строка, которая будет $eval -ed в контексте области. Не получатель, который просто вернет объект.

Попробуйте с

scope.$watch(function() { return authenticationService.user; }, 
      function() { update(authenticationService.user); }, 
      true); // use true to check for differences in object's properties. 
-1

$watch evalates функций или выражений, а в случае expressiones, там оцениваются по текущей области. Если вы собираетесь посмотреть переменную, убедитесь, что она прикреплена к области первой:

scope.user = authenticationService.user 
scope.$watch('user', function (user, old) { update(user); }); 
+0

Это не сработает - оно добавит только значение геттера в область видимости, а не сам getter. –

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