2016-12-30 42 views
0

方法1以下兩個AngularJS構造(如果有)之間的區別?

在HTML:

<my-directive> 
</my-directive> 

在腳本:

function myDirective() { 
    var ddo = { 
     [LOTS OF OTHER VERY IMPORTANT DIRECTIVE PROPERTIES HERE] 
     controller: myController 
     bindToController: true 
    }; 
    return ddo; 
} 

方法2

在HTML:

<my-directive ng-controller="myController"> 
</my-directive> 

腳本:

function myDirective() { 
    var ddo = { 
     [LOTS OF VERY IMPORTANT DIRECTIVE PROPERTIES HERE] 
    }; 
    return ddo; 
} 

兩種情況下,與其他一些特性(模板等),但我只是改變這裏我把控制器指令。這兩種方法是否類似?

+0

的兩個答案,我的答覆是突然被刪除......哦也感謝反正 – user7339019

+0

你是什麼意思? –

+0

我的帖子的兩個答案,都以同樣的精神,說: – user7339019

回答

1

不,第一種方法是優選的。

差異在於角度如何對待範圍。

第二方法使得指令依賴於外部範圍(由ng-controller="myController"創建),其是針對創建指令(代碼隔離)的點。

第二種方法的工作方式相同,當您使用父母範圍(默認情況下,當你不設置scope財產指令DDO - Ref: What is default Angular directive scope

如果您在指令隔離範圍

第二種方法是行不通的,如下創建:

scope: { 
    param1: "=" 
} 

由於您將無法訪問myController的屬性。


編輯

指令規則可能是複雜的,瞭解所有的情況下,可以考慮使用.component(),因爲它有更簡單,並遵循最佳實踐 - Introduction to Angular's components


延伸閱讀:

+0

謝謝,正是我所需要的! – user7339019

+0

還有一個跟進,這是否意味着創建一個指令與* no *範圍屬性之間的差異與創建它與範圍屬性設置爲一個空對象之間的區別? – user7339019

+0

@ user7339019 - 是的,'scope'參數有兩個值,true/false或object。如果存在對象(即使爲空),則範圍將被隔離,您無法從父級範圍訪問屬性。 如果'scope'設置爲false或僅在DDO中跳過,則指令不會創建新的範圍。 –