如何在AngularJS材质表单字段中向$ validators添加函数?

时间:2019-07-17 18:08:54

标签: angularjs forms validation angularjs-material

我做了一个自定义指令,该指令代表一个表单字段验证器,称为“ assetDisabled”。在HTML中,我已将指令作为父标记的属性包括在内,但显然第四个参数(ctrl)是作为单向数据绑定传递的,因为在父控制器中,我的函数未添加到$ validators数组中。名为“资产”的字段。

我已经阅读了Angularjs文档中有关自定义指令的所有示例。

父标记:

<md-autocomplete flex
    required
    id="asset"
    name="asset"
    md-no-cache="true"
    md-min-length="0"
    md-input-name="asset"
    md-floating-label="Asset"
    ng-model="vm.selectedAsset"
    md-item-text="asset.display"
    md-selected-item="vm.selectedAsset"
    md-search-text="vm.searchAssetText"
    disabled-asset="{{vm.selectedAsset}}"
    md-menu-class="autocomplete-custom-template"
    md-items="asset in vm.querySearch(vm.assets, vm.searchAssetText)">

    .....
    <div ng-messages="addIncident.asset.$error" ng-if="addIncident.asset.$touched">
        <div ng-message="disabled-asset">Error message</div>
    </div>
</md-autocomplete>

指令disableAsset:

(function() {
    'use strict';

    angular
        .module('app.directives')
        .directive('disabledAsset', disabledAsset);

    /* @ngInject */
    function disabledAsset() {
        return {
            restrict: 'A',
            required: 'ngModel',
            link: function(scope, el, attrs, ctrl) {
                if(!ctrl) return;

                ctrl.$validators.disabledAsset = function (asset) {
                    return (asset && asset.status === 'DISABLED') ? hasPermission() : true;
                }

                function hasPermission() {
                    ...
                }

                attrs.$observe('selectedAsset', function () {
                    ctrl.$validate();
                })
            }
        }
    }
})();

我只希望将我的功能添加到资产字段$ validators中!!!

0 个答案:

没有答案