我正在尝试添加输入指令以修剪所有文本输入。到目前为止,这是我的指令的代码:
app.directive("input", function directive() {
return {
restrict: "E",
priority: 1,
require: "ngModel",
link: function link(scope, element, attrs, ctrl) {
element.on("focusout", function triggerChange(event) {
var input = event.target;
if (input.value && input.type === "text") {
ctrl.$setViewValue(input.value.trim());
ctrl.$render();
}
});
}
};
});
我的问题是,似乎没有注入ngModel,因为我收到错误:
Error: [$compile:ctreq] Controller 'ngModel', required by directive 'input', can't be found!
知道为什么会这样,以及如何解决它?
更新
实际上,这是Kendo Grid和AngularJS的互动。我正在测试的输入是由Kendo Grid生成的。该列的代码是标准的:
{ field: "name", title: "titleName" }
答案 0 :(得分:0)
您的HTML中必须有一些input
元素没有ng-model
。
您可以将代码更改为require: "?ngModel",
,然后检查ctrl
是否undefined
,例如:
app.directive("input", function directive() {
return {
restrict: "E",
priority: 1,
require: "?ngModel",
link: function link(scope, element, attrs, ctrl) {
if (!ctrl) { return ;}
element.on("focusout", function triggerChange(event) {
var input = event.target;
if (input.value && input.type === "text") {
ctrl.$setViewValue(input.value.trim());
ctrl.$render();
}
});
}
};
答案 1 :(得分:0)
当您使用此指令时,您应该在html中提供ng-model
,因为您在指令中编写了require: 'ngModel',
。因此,在您的情况下,您的指令名称是输入,所以它将类似于
<input ng-model="something"> </input>