2

我想使用 angularjs 和 angular-ui(特别是 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,但是当我尝试使用由 angular-ui 定义的输入时,它不起作用(不会更改输入的读/写状态)。

此处涵盖了完整的场景:http: //plnkr.co/edit/pKs4Tq

4

1 回答 1

3

不幸的是,AngularUIui-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" ... />

Plunkerhttp ://plnkr.co/edit/LBFDg2

该方法的优点是,如果将来 AngularUI 决定包含对 的支持ng-readonly,您只需替换cs-ng-就可以了。

于 2012-12-07T16:14:39.227 回答