2014-02-26 27 views
5

雖然改寫ng-include我的需要,我發現direcive ngIncludeFillContentDirective,該聲明爲ng-include像:在Angular中聲明兩次相同的指令的目的是什麼?

.directive({ngInclude: ngIncludeDirective}).directive({ngInclude: ngIncludeFillContentDirective})

你可以看到ngInclude source here。你可以看到被調用的指令方法如上here

那麼,它對實際指令的影響究竟是什麼?它只是作爲另一個指令應用嗎?它有特殊的意義嗎?

回答

1

second link顯示核心角度指令的彙編。 .directive函數編譯提供程序使用$provide.provider('$compile', $CompileProvider).

您的第一個鏈接顯示聲明ngIncludengIncludeFillContentDirective。你可以看到ngIncludeFillContentDirective取決於ngInclude

我非常肯定,在編譯過程中,需要先編譯ngInclude,然後編譯ngIncludeFillContentDirective

所以,我相信這是與.directive鏈接訂購編譯過程,並建立在正確的順序依賴關係。

編輯:
所以,here is the current source$CompileProvider。這個對象有一個名爲directive的函數。這是OP中調用的功能。

你可以看到,如果參數不是字符串,它調用參數對象在這條線:

forEach(name, reverseParams(registerDirective)); 

這基本上使用forEach迭代參數對象的屬性。 forEach拉鍵調出的對象,然後做到這一點:

iterator.call(context, obj[key], key); 

所以,它只能使用密鑰的

我想這是歸結於對象的屬性名稱(所以,ngInclude{ngInclude: ngIncludeFillContentDirective})只是必須是唯一的。該物業的價值(ngIncludeFillContentDirective)是註冊的。

所以,似乎沒有任何特殊的含義。至少沒有我能找到的。

+0

沒錯,但它是用相同的名字聲明的。所以創建一個「ng-include」元素,會調用這兩個指令? – Zequez

+0

@Zequez我在更多調查後編輯了答案。 –

3

對於多個指令,您可以使用相同的名稱,如果您查看ngInclude ngInclude.js的源代碼,您將看到每個指令都具有優先級屬性,所有代碼都將被執行。第一個是400,最後一個是-400。優先級實際上代表了同一名稱但不同優先級的指令將執行的順序。

你甚至可以附加你的指令出於某種原因,但添加較低的優先級,以確保它呈現所需的。雖然覆蓋本機ng-directives是不可取的。

相關問題