我想禁用仅对活动用户可用的某组按钮(我在这些按钮上使用 ngClick),并在验证帐户确实处于活动状态的请求解决后再次启用它们。
我目前的实现如下:
directive('activeCompanyButton', function(authService, companyService) {
var defualtFunction = function(e){
e.preventDefault();
};
function bind(elem){
elem.addClass('disabled');
elem.bind('click', defualtFunction);
}
function unbind(elem){
elem.removeClass('disabled');
elem.unbind('click', defualtFunction);
}
return{
// scope: false,
link: function(scope, elem, attrs){
bind(elem);
},
controller: function($scope, $element, $attrs, authService, companyService){
function checkCompanyStatus(val){
var company = val;
var r = company && company.status == 'active';
return r;
}
$scope.$watch(function(){return companyService.getCompanyData(authService.getCompanyId())}, function(val){
console.log(val);
if(checkCompanyStatus(val)){
unbind($element);
$element.bind('click', $scope.$eval($attrs.ngClick));
}
else{
bind($element);
}
});
}
}
});
这些都不起作用,甚至 $scope.$eval() 都不起作用(我应该从函数名中去掉 '()' 并让函数给出函数引用而不是函数调用吗?)。
我是否应该使用隔离范围,我目前没有这样做,因为据我所知,这将创建多个脏检查(观察者)实例,而不仅仅是一个。