3

在 ngModelController 示例的 Angular 文档中,javascript 文件说:

angular.module('customControl', []).
    directive('contenteditable', function() {
        return {
            restrict: 'A', // only activate on element attribute
            require: '?ngModel', // get a hold of NgModelController
            ...

为什么“ngModel”指的是 NgModelController?为什么不是,“require: '?ngModelController” 从命名的角度来看,这似乎更合适。

另外,使用 $setViewValue() 函数更新模型与使用 $watch() 函数在指令范围内监视模型的变化有什么区别?

谢谢!

4

2 回答 2

2

为什么“ngModel”指的是 NgModelController?为什么不是,“require: '?ngModelController” 从命名的角度来看,这似乎更合适。

因为该require属性用于需要一个控制器指令。例如,该ngModel指令有一个controller属性,该属性具有$setViewValue和其他一些功能。如果您正在制作自定义指令,您可以为它创建一个控制器,然后其他指令可以通过说require: '?yourDirective'orrequire: '^yourDirective'或来访问它require: 'yourDirective'

来自 Angular 文档:

controller- 控制器构造函数。控制器在预链接阶段之前被实例化,如果它们按名称请求它,它会与其他指令共享(参见 require 属性)。这允许指令相互通信并增强彼此的行为。

require- 要求将另一个控制器传递到当前指令链接函数中。require 需要传入指令控制器的名称。如果找不到这样的控制器,则会引发错误。

你可以在这里阅读更多。

于 2013-06-12T01:04:23.510 回答
0

我们可以使用 ngModelController 将第三方插件与 AngularJS 应用程序集成,这里是我写的博客的链接,通过示例详细解释了这一点:

使用 ngModelController 将第三方插件与您的 AngularJS 应用程序集成

于 2017-02-02T07:54:39.327 回答