Следующее за this answer, я пытался создать две директивы, чтобы позволить/запрещать элементы, которые должны быть видны конечному пользователю.Директива по скрыть/показать элементы на основе сеанса - AngularJS
angular.module('app.directives').directive('deny', ['SessionTool', function (SessionTool) {
return {
restrict: 'A',
link: function (scope, elem, attrs) {
scope.$watch(SessionTool.user, function (value, oldValue) {
var list = attrs.deny.split(',');
if (SessionTool.hasAnyRole(list))
return elem.hide();
return elem.show();
});
}
}
}]);
Моя проблема заключается в том, что когда я сделать вход, функция $watch
не вызывается снова, чтобы сделать невидимым элемент появляется.
Ниже приводится резюме моего SessionTool.
angular.module('app.tools').factory('SessionTool', ['$cookies', function ($cookies) {
var _cookieKey = 'user';
return {
user: {},
init: function() {
var u = $cookies.get(_cookieKey);
try {
u = angular.fromJson(u);
this.user = u;
} catch (e) {
console.log('invalid json');
}
},
login: function (u) {
this.user = u;
$cookies.putObject(_cookieKey, u, {path: '/'}); // @TODO encrypt the whole JSON before saving it to cookies.
},
...
};
}]);
Любой может указать, почему часы $ не уволены?
Заранее спасибо.
Я предполагаю, что ваши часы не увольняются, потому что переменная SessionTool.user не существует в области ваших указателей. –