boy*_*son 13 javascript angularjs angularjs-directive
我有一个自定义导航指令需要一个可选的"禁用"属性,我不确定它是否可能.
在我的主控制器中:
.controller('NavCtrl', ['UserResource','RoleResource'], function(UserResource,RoleResource){
var user = UserResource.getUser();
var roles = RoleResource.getRoles();
UserService.init(user, roles); //????
});
Run Code Online (Sandbox Code Playgroud)
在我的指令中:
.directive('navItem', function(){
return{
restrict: 'A',
scope: {
text: '@',
href: '@',
id: '@',
disable: '&'
},
controller: function($scope, $element, $attrs){
$scope.disabled = ''; //Not sure I even need a controller here
},
replace: true,
link: function(scope, element, attrs){
scope.$eval(attrs.disable);
},
template: '<li class="{{disabled}}"><a href="{{href}}" id="{{id}}">{{text}}</a></li>'
}
});
Run Code Online (Sandbox Code Playgroud)
在我的HTML中,我想做这样的事情:
<div data-nav-item text="My Text" href="/mytemplate.html" id="idx"
disable="UserService.hasRole('ADMIN,BILLING') && someOtherFn(xxx) || ...">
Run Code Online (Sandbox Code Playgroud)
你可以通过chaning $ eval来调用你的工作
scope.$parent.$eval(attrs.disable);
Run Code Online (Sandbox Code Playgroud)
因为您需要评估attrs.disable父范围中包含的表达式,而不是指令的隔离范围.但是,由于您使用的是'&'语法,它将自动评估父作用域中的表达式.所以,请执行以下操作:
if(angular.isDefined(attrs.disable)) {
scope.disable();
}
Run Code Online (Sandbox Code Playgroud)
小提琴.