我想根据范围变化禁用按钮。
这是我当前的指令代码:
function disabledButton(){
return {
restrict: 'EA',
priority:1001,
scope:{
isLoading: '=loading'
},
link:(scope, element, attrs, isLoading)=>{
scope.$watch('isLoading', () => {
element.attr('disabled', true);
});
}
}
}
我的HTML:
<button type="submit" class="pull-right" disabled-button>Update</button>
我的控制器很简单:
$scope.loading = true;
但它没有用。该按钮未被禁用。
任何解决方案?
的jsfiddle https://jsfiddle.net/ssuhat/gp6tq0Lt/7/
答案 0 :(得分:1)
link
和compile
无法协同工作。
在指令定义对象中,如果只定义链接,那就像使用空preLink
函数的空编译函数和postLink
函数中的代码一样简写。定义compile
后,link
会被angular忽略,因为compile
应该返回链接函数。
如果您只从compile
返回一个函数,那么它将在链接后执行。
angular.module('app', [])
.controller('myctrl', function($scope, $timeout) {
$scope.loading = true;
$scope.change = function() {
$scope.loading = !$scope.loading;
}
})
.directive('disabledButton', function() {
return {
restrict: 'AE',
scope: {
isLoading: '='
},
compile: function() {
return function(scope, element, attrs) {
console.log(element);
var loading = scope.isLoading;
scope.$watch('isLoading', function(a, b) {
element.attr('disabled', a);
});
}
}
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="myctrl">
<button ng-click="change()">dsa</button>
<div class="row">
<button is-loading="loading" disabled-button>Update</button>
</div>
</div>
</div>
&#13;
答案 1 :(得分:0)
尝试使用AngularJS提供的ngDisabled指令。
<button ng-model="button" ng-disabled="isLoading">Button</button>
答案 2 :(得分:0)
使用element.prop('disabled', true);
代替element.attr('disabled', true);
另外,请确保在$watch
语句中添加else语句以重新启用该按钮。