在 AngularJS 中需要 ngModel 语法

require ngModel syntax in AngularJS

我看到以下内容:

// my-directive.js    
return {
  require: 'ngModel',
  scope: {
    ngModel: '=',
  },
  controller: controller,
  link: myLink
};

// my-link.js
return function(scope, $element, attrs, modelController) {
  scope.onMyClick = function(event) {
    modelController.$setViewValue(getItem(event));
  }
};

// foo.html
<my-directive ng-model="myModel"></my-directive>

ng-model 指令是否用于在声明 my-directive 实例的外部范围内为 myModel 提供双向数据绑定?

这是在 Angular 1.4 中提供指令和外部模型之间双向数据绑定的惯用方式吗?

除了将 ng-model 指令实例的控制器实例注入 link 函数 my-link 之外,指令定义中的 require: 'ngModel' 是否执行任何其他操作?

最后,它是否使 ng-model 的控制器在范围内可供 my-directive 的控制器使用?

这里有 2 个不同的东西 - ng-model 作为指令,ngModel: '=' 在指令中作为属性。让我们拆分它们:

<my-directive ng-model="myModel" whatever="myModel"></my-directive>

return {
  require: 'ngModel',
  scope: {
    myModel: '=',
  },
  controller: controller,
  link: myLink
};

Is the ng-model directive used to provide a two way data-binding to the myModel in the outer scope where the my-directive instance is declared?

不,2 向绑定由指令内部的定义提供。 (whatever 这里)

Is this the idiomatic way to provide two-way data binding between a directive and an outer model in Angular 1.4?

您使用的范围之一:{ whatever : '='} 是通常的方式。

Does the require: 'ngModel' in the directive definition do anything other than inject the controller instance for the ng-model directive instance into the link function my-link

没那么多,如果你使用没有 ngModel 的指令,它会抛出错误。

Finally, does it make the controller of ng-model available on the scope for the controller of my-directive to use?

不,它不会向您的范围添加任何内容。您可以访问注入的控制器。