我有一个简单的指令,用于在视图上呈现选择字段。我收到以下错误。
当我删除" replace:true"时,它运作良好。
Error: $compile:multidir
Multiple Directive Resource Contention
Multiple directives [ngModel, ngModel] asking for 'ngModel on: {5}
以下是代码:
(function () {
function YesNoDecline($timeout) {
return {
restrict: 'E',
replace: true,
template: '<select class="form-control" id="{{ ::id }}" name="{{ ::name }}" ng-model="ngModel.$viewValue"> ' +
' <option ng-repeat="obj in data" value="{{ ::obj.value }}">{{ ::obj.text }}</option>' +
'</select>',
require: 'ngModel',
scope: {
id: '@',
name: '@',
data: '=ds'
},
link: function (scope, element, attrs, ngModelCtrl) {
scope.ngModel = ngModelCtrl;
}
};
};
YesNoDecline.$inject = ['$timeout'];
appModule.directive('yesNoDecline', YesNoDecline);
})();
答案 0 :(得分:0)
由于YesNoDecline指令设置了replace: true
,因此该指令绑定到其模板的最外层元素,在本例中为<select>
元素。这个select元素正在请求ng-model指令。
我认为您的调用模板有一行<yes-no-decline ng-model="myForm.myBool"></yes-no-decline>
。这导致对一个元素的ng-model指令的2个请求,这不起作用。 HTML不允许您在元素上具有2个相同的属性。有几种方法可以消除这种情况:
replace: true
<select>
<div>
元素
require:'^^ng-model'
,将您的调用代码更改为<div ng-model="myForm.myBool"><yes-no-decline></yes-no-decline></div>
<select>
元素