如何使角度ui输入与angularjs属性(特别是ng readonly)协作?
我想使用angularjs和AngularUI(特别是ui-select2特性)实现对选择输入的读/写访问控制。 场景很简单:通过使用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
<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
指令没有与angularJSng 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并检查对这些指令的任何引用。