我有一个指令,我只有当我的认证服务告诉我这样:
<div my-loggedin-directive ng-if="security.isAuthenticated()"></div>
指令本身是空的:
.directive('myLoggedinDirective', [
function() {
return {
templateUrl: 'modules/myLoggedinDirective.tpl.html',
restrict: 'A',
replace: true,
link: function($scope) {
$scope.$on('$destroy', function() {
console.log('$destroy');
});
}
};
}
]);
因为我的指令应该总是在我登录时呈现,所以ngIf逻辑应该在指令声明中,而不是在ng-if中(没有ngIf的指令将完全被破坏)。
知道我想要与ngIf
相同的行为,我如何更改指令代码(在指令声明中注入对安全服务的测试)?:
- 指令仅在
nfIf
解析为true
时出现在DOM中 - 当
nfIf
解析为false
时自动调用$destroy ?
我尝试使用compile
函数和一个观察者来观看security.isAuthenticated()
,但没有成功
声明额外的指令属性,将安全对象传递给你的指令:
<div my-loggedin-directive my-security='security'></div>
并且指令应该包含作用域,确保它使用双向绑定:
.directive('myLoggedinDirective', [
function() {
return {
scope: {
security: "=mySecurity"
}
templateUrl: 'modules/myLoggedinDirective.tpl.html',
restrict: 'A',
replace: true,
link: function($scope) {
$scope.$on('$destroy', function() {
console.log('$destroy');
});
$scope.$watch('security', function(newVal, oldVal) {
if (newVal.isAuthenticated()) {
// do something
} else {
// do something
}
});
}
};
}
]);
现在你可以访问$scope了。myLoggedinDirective.tpl.html
<div ng-if="security.isAuthenticated()">...</div>