2017-09-22 100 views
0

我對此指令定義對象 - (restrict)感到困惑。我創建了兩個函數,第一個是restrict,另一個是沒有restrict帶有「限制」且沒有「限制」的角度指令

當我運行這段代碼時,兩個指令都返回了相同的結果。

隨着restrict

app.directive 'helloWorld', -> 
    return { 

    restrict: 'AE' 
    link: (scope, elem, attrs) -> 
     console.log "HELLO WORLD" 

    } 

沒有restrict

app.directive 'helloWorld', -> 
    return { 

    link: (scope, elem, attrs) -> 
     console.log "HELLO WORLD" 

    } 

有人能告訴我這是怎麼回事? PS:我是新角色。請,如果你能幫助我,這真的很感激。

回答

0

甲指令可以指定其中4種匹配類型它在指令定義的限制屬性支持:從angular docs:

'A' - only matches attribute name 
'E' - only matches element name 
'C' - only matches class name 
'M' - only matches comment 

這些限制可以根據需要所有組合目的。

The default是EA。即,如果沒有規定限制。

的限制選項通常設置爲:

'A' - only matches attribute name 
'E' - only matches element name 
'C' - only matches class name 
'M' - only matches the comment 

這些限制可以根據需要所有被組合:

「AEC」 - 匹配任一屬性或元素或類名 ( ECA - 訂單無關緊要)

source - Angularjs文檔

app.directive 'helloWorld', -> 
    return 
    restrict: 'AE' 
    link: (scope, elem, attrs) -> 
     console.log "HELLO WORLD" 

app.directive 'helloWorld', -> 
    return 
     link: (scope, elem, attrs) -> 
      console.log "HELLO WORLD" 

是相同的,沒有區別。既可以作爲

<helloWorld> ... </helloWorld> 

<ANY helloWorld> ... </ANY> 

說,如果你只有restrict E。然後,該指令的功能僅適用於

<helloWorld> ... </helloWorld> 

<ANY helloWorld> ... </ANY> // wont work since the directive is bound only to element 
+0

「默認值是EA,即如果未指定限制。」謝謝@Sibi Raj。現在對我來說很清楚。 –

+0

歡迎並感謝您的編輯。 –

2

Restrict引用您的指令應匹配的元素類型,並且不會影響(以任何方式)指令的返回結果。

'AEC' - matches either attribute or element or class name

+1

只是一個補充:爲什麼OP的指令在有和沒有'restrict:'AE'的情況下是相同的,原因是,指令的默認限制是'EA'。 –

0

只是一個小提示:如果你的名字首字母大寫的方式你的指令,你需要-來取代它在HTML代碼中使用時如

<hello-world></hello-world> 

當你E值設置爲restrict

<ANY hello-world></ANY> 

當您設置A值。