如何使角度ui输入与angularjs属性(特别是ng readonly)协作?

如何使角度ui输入与angularjs属性(特别是ng readonly)协作?,angularjs,angular-ui,Angularjs,Angular Ui,我想使用angularjs和AngularUI(特别是ui-select2特性)实现对选择输入的读/写访问控制。 场景很简单:通过使用ng readonly属性,我可以控制用户是否可以更改给定的输入值 <input id="clientShortName" class="span4" type="text" ng-readonly="readOnly" ng-model="client.shortName" /> <input ui-select2="{ tags: somet

我想使用angularjs和AngularUI(特别是ui-select2特性)实现对选择输入的读/写访问控制。 场景很简单:通过使用ng readonly属性,我可以控制用户是否可以更改给定的输入值

<input id="clientShortName" class="span4" type="text" ng-readonly="readOnly" ng-model="client.shortName" />
<input ui-select2="{ tags: sometags}" id="clientTagsSelection" class="span4" type="text" ng-readonly="readOnly" ng-model="client.tagsSelection"/>
<input type="button" value="Edit" ng-click="readOnly = !readOnly"/>

这对于标准angularjs很好,但当我尝试使用AngularUI定义的输入时,它不起作用(不会更改输入的读/写状态)


这里介绍了完整的场景:

不幸的是,AngularUI
ui-select2
指令没有与angularJS
ng readonly
指令集成

克服此问题的一种方法是创建自己的指令,并观察
readOnly
属性的更改,如下所示:

app.directive('csReadonly', function() {
  return {
    restrict: "A",
    link: function(scope, iElement, iAttrs, controller) {
      scope.$watch(iAttrs.csReadonly, function(readonly) {
        iElement.select2(readonly ? 'disable' : 'enable');
      });
    }
  }
});
<input ui-select2="{ tags: sometags }" cs-readonly="readOnly" ... />
然后像这样使用它:

app.directive('csReadonly', function() {
  return {
    restrict: "A",
    link: function(scope, iElement, iAttrs, controller) {
      scope.$watch(iAttrs.csReadonly, function(readonly) {
        iElement.select2(readonly ? 'disable' : 'enable');
      });
    }
  }
});
<input ui-select2="{ tags: sometags }" cs-readonly="readOnly" ... />

Plunker


这种方法的优点是,如果AngularUI将来决定包括对
ng只读
的支持,您只需将
cs-
替换为
ng-
,就完成了。

谢谢!有没有不兼容的angularjs/AngularUI指令列表?我不相信有。唯一的方法是直接查看AngularUI并检查对这些指令的任何引用。