如何使用角度指令动态地使表单元素只读?

Posted

技术标签:

【中文标题】如何使用角度指令动态地使表单元素只读?【英文标题】:How can I dynamicly make form elements read-only with a directive in angular? 【发布时间】:2017-11-23 23:12:36 【问题描述】:

当指令的给定属性具有特定名称时,我想将某些元素(例如“选择、输入、文本区域、按钮”)只读。

此问题中的所有代码都被缩小以使其更清晰。

例如,此元素上有一个指令“dynamic-input-field”:

<ui-select ng-model="controllerData.header.subsidiary"
         theme="bootstrap"
         class="googleSearch"
         ng-disabled="quotationData.readOnly || isFieldDisabled('subsidiary')" 
         on-select="subsidiaryChanged(controllerData.header.subsidiary)"
         dynamic-input-field="A">
    <ui-select-match allow-clear="true" autofocus="true" placeholder="Subsidiary">$select.selected.description</ui-select-match>
    <ui-select-choices repeat="subsidiary in presetData.subsidiariesChange | filter: 'description': $select.search">
        <div ng-bind-html="subsidiary.description | highlight: $select.search"></div>
    </ui-select-choices>
</ui-select>

有了这个指令,我想禁用这个 ui-select 元素,当它有一个特定的名字时(在这种情况下它是 "A"

我已经尝试了很多可能性,但我找不到合适的方法来做到这一点。这是我的指令

'use strict';

/**
 * @ngInject
 */
module.exports = function() 
    return 
        restrict: 'A',
        compile: function (element, attrs) 
            if (attrs.dynamicInputField === "A" ) 
                // I have tried all these options but it doesn't seem to disable the select element
                // element.prop('disabled', 'disabled');
                // element.attr("ng-disabled", 'isReadOnly');
                // element.attr("ng-disabled", 'true');
                // element.attr("ng-disabled", true);
                // element.attr("ng-disabled", 'disabled');
                // element.prop('readonly', true);
            
        
    ;
;

【问题讨论】:

【参考方案1】:

恐怕选择器无法正确处理“只读”。我建议您改用“禁用”,但在这种情况下,您似乎已经有了使用它的指令指令。

【讨论】:

以上是关于如何使用角度指令动态地使表单元素只读?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 Angular 2 反应/动态表单的一个元素发生的变化?

angular - 指令中表单元素之间动态变化的验证要求

如何仅使用角度指令将放置元素拖放到日历中

为所有表单元素添加只读属性

如何以角度动态设置属性?

使用角度形式更改表单元素