AngularJS ngModelController基本问题

时间:2013-06-11 23:13:55

标签: javascript angularjs angularjs-directive

在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()函数监视指令范围内模型的更改有什么区别?

谢谢!

2 个答案:

答案 0 :(得分:2)

  

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

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

来自Angular文档:

  

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

  

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

您可以阅读更多here

答案 1 :(得分:0)

我们可以使用ngModelController将第三方插件与AngularJS应用程序集成,这里是我编写的博客的链接,用于详细解释这个例子:

Integrate third-party plug-in, with your AngularJS app using ngModelController