无法在Kendo Grid

时间:2015-11-23 10:24:31

标签: angularjs angularjs-directive kendo-grid

我正在尝试添加输入指令以修剪所有文本输入。到目前为止,这是我的指令的代码:

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" }

2 个答案:

答案 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>