亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

定義指令時,'controller','link'和'compile'函數之間的區別

定義指令時,'controller','link'和'compile'函數之間的區別

互換的青春 2019-08-28 16:20:37
定義指令時,'controller','link'和'compile'函數之間的區別有些地方似乎使用控制器功能用于指令邏輯而其他地方使用鏈接。角度主頁上的選項卡示例使用控制器作為一個,并鏈接另一個指令。兩者有什么區別?
查看完整描述

3 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

我將稍微擴展你的問題,并包括編譯功能。

  • 編譯函數 - 用于模板 DOM操作(即操作tElement = template元素),因此適用于與指令關聯的模板的所有DOM克隆的操作。(如果還需要鏈接函數(或前后鏈接函數),并且定義了編譯函數,則編譯函數必須返回鏈接函數,因為'link'如果'compile'定義了屬性,則忽略該屬性。)

  • 鏈接函數 - 通常用于注冊偵聽器回調(即$watch作用域上的表達式)以及更新DOM(即,操作iElement =單個實例元素)。它在克隆模板后執行。例如,在an中<li ng-repeat...>,在將<li>模板(tElement)克隆到該特定<li>元素(到iElement)之后執行鏈接功能。A $watch允許指令通知范圍屬性更改(范圍與每個實例關聯),這允許指令將更新的實例值呈現給DOM。

  • controller函數 - 當另一個指令需要與該指令交互時必須使用。例如,在AngularJS主頁上,pane指令需要將其自身添加到tabs指令維護的作用域,因此tabs指令需要定義窗格指令可以訪問/調用的控制器方法(思考API)。

    有關tab和pane指令的更深入說明,以及tabs指令使用this(而不是on $scope)在其控制器上創建函數的原因,請參閱AngularJS控制器中的'this'vs $ scope。

通常,您可以將方法$watches等放入指令的控制器或鏈接函數中。控制器將首先運行,這有時很重要(當ctrl和link函數使用兩個嵌套指令運行時,請參閱此小提琴。正如Josh在評論中提到的那樣,您可能希望將范圍操作函數放在控制器中,以便與框架的其余部分保持一致。


查看完整回答
反對 回復 2019-08-28
  • 3 回答
  • 0 關注
  • 774 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號