2014-04-24 72 views
1

有誰知道有一個方法可以選擇性地傳遞指令的主體?Angular Selective Transclude

例如,如果我有以下div和myWrapper指令。

<div data-my-wrapper="foo"> 
    <h1>Hello World</h1> 
</div> 

我想我的代碼在我的指令,就像這個僞代碼。

if (foo.locked) { 
    // user a static template saying that the item is locked. 
} 
else { 
    // Tranclude the body content 
} 

有沒有辦法直接指導指令什麼內容應該被跨越?或者是否有推薦的方法來獲得相當於if/then/else的內容,以便我可以替換內容而不是指令所在元素的內容?

+2

你可能會尋找transclude連接功能(即第五個參數的指令'link'功能)來訪問transcluded內容做你需要做的事情。這是一個快速演示[JSFiddle](http://jsfiddle.net/dwAXF/)。 – miqid

+0

@miqid - 這就是我一直在尋找的!你可以把這個作爲答案,我可以接受它嗎?謝謝,我從來不知道控制器之後還有另一個參數! – RullDawg

回答

0

您可以通過使用第五個參數來訪問指令的link函數中的transcluded內容,該函數恰好是一個transclude鏈接函數。還請記住設置指令的transclude屬性。

function link(scope, iElement, iAttrs, controller, transcludeFn) { ... } 

這裏的transclude在工作中連接功能的粗示範:JSFiddle

很高興幫助。

注:

請注意,如果您使用的是版本AngularJS到1.2.x版本之前,該鏈接功能的transclude是不是可以作爲第三個參數的指令的compile財產。正如official documentation指出的那樣,這已被棄用。