Angular指令设置disabled属性

时间:2015-10-07 09:43:26

标签: angularjs angularjs-directive directive

我希望能够从两个地方设置任何控件的disabled属性。在控件本身上,基于视图本身硬编码的规则。并且来自基于外部服务中定义的规则的指令。

当指令将disabled设置为true时,不应该通过控件上定义的内容覆盖它。但是,当指令将disabled设置为false时,应触发控件上定义的内容。

我希望这是有道理的。到目前为止,我有这个代码,但它不能按我想要的方式工作。

<input check-edit-matrix type="checkbox" 
       data-ng-model="model.isPrivate" 
       ng-disabled="model.isDeleted || model.isConfidential"  />
(function () {
  'use strict';

  var directiveId = 'checkEditMatrix';

  angular.module('common.directives')
         .directive(directiveId, ['dataService', directiveFunc]);

  function directiveFunc(dataService) {
    return {
      restrict: 'A',
        scope: { 
        },
        link: function (scope, element, attrs) {

          attrs['disabled'] = 'disabled';

          //if (attrs['disabled'] === 'disabled') {
          //    alert('already disabled !')
          //}
        }
      };
    }
})();

1 个答案:

答案 0 :(得分:0)

将指令的价值与你所拥有的相结合将完成这项工作。让我们说该指令定义了一个属性:isDisabledByDirective,将您的代码更改为:

<input check-edit-matrix type="checkbox" 
   data-ng-model="model.isPrivate" 
   ng-disabled="model.isDeleted || model.isConfidential || isDisabledByDirective"  />

它应该工作的原因是,如果它已被值禁用,则指令不能更改它(true || false)=== true。如果现有值不禁用它,则指令代码可能会更改它 - (false || true)=== true