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