我做了一个自定义指令,该指令代表一个表单字段验证器,称为“ 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中!!!