我有这两个指令:
app.directive('autofocus', function ($timeout) {
return {
scope: {
trigger: '=autofocus'
},
replace: false,
link: function (scope, element) {
scope.$watch('trigger',
function (value) {
if (value) {
$timeout(function () {
element[0].focus();
});
}
}
);
}
};
});
app.directive('checkCustomerName', function(Customer) {
return {
require: 'ngModel',
scope: {
value: '=ngModel'
},
link: function(scope, elm, attrs, model) {
var CUSTOMERNAME_REGEXP = /^([ \u00c0-\u01ffa-zA-Z'\-])+$/;
var retval;
model.$parsers.unshift(function(viewValue) {
if (CUSTOMERNAME_REGEXP.test(viewValue)) {
var current = attrs.customerId;
var exists = Customer.findByName(viewValue);
if (exists && exists !== current) { // customer name exists already
model.$setValidity('taken', false);
model.$setValidity('invalid', true);
} else { // customer name does not exist
model.$setValidity('taken', true);
model.$setValidity('invalid', true);
retval = viewValue;
}
} else { // customer name is not valid
model.$setValidity('taken', true);
model.$setValidity('invalid', false);
}
return retval;
});
elm.bind('blur', function() {
if (model.$viewValue) { // capitalize all words in value
model.$viewValue = capitalizeAllWords(model.$viewValue);
model.$render();
}
});
}
};
});
当它们分开使用时,它们可以流畅地工作,但是,当在同一个元素上使用时,我得到:
Multiple directives [autofocus, checkCustomerName] asking for new/isolated scope on:
<input type="text" autofocus="true" check-customer-name>
我怎样才能让他们继续工作? (对不起,我没有深入研究ng-directives逻辑,但......: - ()。
答案 0 :(得分:1)
只需删除其中一个指令的隔离范围,然后再查看该属性。
F.e。
app.directive('autofocus', function ($timeout) {
return {
replace: false,
link: function (scope, element, attr) {
scope.$watch(attr.autofocus,
function (value) {
if (value) {
$timeout(function () {
element[0].focus();
});
}
}
);
}
};
});
答案 1 :(得分:0)
我遇到了同样的错误'多个指令要求新/隔离范围'。 在我的情况下,问题是有多个指令注册具有相同的名称。
.directive('directiveName', () => {})
.directive('directiveName', () => {});
错误合并后发生的。 删除其中一个修复了问题。