我有两个指令,为简单起见,我将问题简化为以下内容:
指令01:处理身份验证
它负责打开模式/窗口并获得用户身份验证。
angular
.module('app.directives')
.directive('requiresLogin', function(){
return {
restrict : 'A',
link : function() { //..}
}
})
指令02:执行特定动作
angular
.module('app.directives')
.directive('like', function(){
return {
restrict : 'A',
link : function() { //..}
}
})
指令01和02都绑定单击事件。
我对两个指令的设计感到困惑。
我可以使第二个指令成为第一个指令的子代,并获得指令之间的通信,这在某种程度上是有意义的,因为每个指令的单一职责都保持在这种模式下。但是,我以后所有需要认证的指令都是第一个指令的子代。
我的问题是:
如何根据第一个“身份验证”指令的结果阻止第二个指令(实际操作)?还有其他方法可以在它们之间不建立“父子”关系吗?
仅添加“ action”指令并向其注入身份验证服务:
http://jsfiddle.net/coma/dby686ab/
逻辑
app.factory('user', function() {
var roles = ['user'];
return {
hasRole: function(role) {
return !role || roles.indexOf(role) > -1;
}
};
});
app.directive('like', function(user) {
return {
restrict: 'A',
link : function(scope, element, attrs) {
element.on('click', function () {
if (user.hasRole(attrs.authRole)) {
element.addClass('liked');
element.off('click');
} else {
alert('Unauthorized.');
}
});
}
};
});
看法
<a like="">Dogs</a>
<a like="" auth-role="user">Birds</a>
<a like="" auth-role="admin">Whales</a>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句