2013-06-11 28 views
3

在ngModelController例如角文件,JavaScript文件說:AngularJS ngModelController基本問題

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()函數來監視指令範圍內的模型更改之間有什麼區別?

謝謝!

+1

,因爲它是一個命名約定,你需要學習它們的時期,它與噴油器有關 – mpm

回答

2

爲什麼「ngModel」指的是NgModelController?爲什麼不是這樣呢,「require:'?ngModelController」從命名的角度來看,這似乎更合適。

由於require屬性用於需要控制器指令。例如,ngModel指令具有controller屬性,該屬性具有$setViewValue和其他一些功能。如果您正在制定自定義指令,則可以爲其創建控制器,然後其他指令可以通過說require: '?yourDirective'require: '^yourDirective'require: 'yourDirective'來訪問它。

從角文檔:

controller - 控制器構造函數。控制器在預鏈接階段之前被實例化,並且如果它們按名稱請求它,則與其他指令共享(請參閱require屬性)。這允許指令相互溝通並增強彼此的行爲。

require - 需要另一控制器被傳遞到當前指令鏈接功能。 require需要一個指令控制器的名字來傳入。如果沒有找到這樣的控制器,則會發生錯誤。

您可以閱讀更多here