2013-04-24 69 views
0

我被卡住了指令的動態模板。主要是被稱爲評論的指令。替換評論指示的內容

例如,我創建了一個指令,應該檢查元素的類型和適當的模板。在鏈接函數中,我檢查作用域中元素的屬性類型並選擇所需的模板。

所有工作正常,如果我把指令作爲一個屬性或元素。但是,如果我將它稱爲註釋,則不會發生任何情況,輸出爲空。

這裏說的指令代碼:

app.directive('inQux', function ($compile) { 
    var template, inQux, linker; 

    template = { 
     foo: '<div>I\'m foo. {{item.value}}</div>', 
     bar: '<div>I\'m bar. {{item.value}}</div>' 
    }; 


    linker = function ($scope, element, attrs) { 
     var content = $compile(template[$scope.item.type])($scope); 

     element.append(content); 
    }; 

    inQux = { 
     restrict: 'AME', 
     replace: true, 
     link: linker 
    }; 

    return inQux; 
}); 

您可以通過以下the link

所以找到完整的例子,我的問題是有沒有辦法來取代對註釋的指令內容?

回答

1

看來你不能在指令的鏈接函數中使用element.append()作爲註釋的指令。但解釋很簡單:將元素附加到註釋節點是不可能的。

如果使用另一種方法(直接綁定模板到你的指令)是這樣的:

app.directive('inQux', function ($compile) { 
    var inQux; 

    inQux = { 
     template: '<div>I\'m {{item.type}}. {{item.value}}</div>', 
     restrict: 'AME', 
     replace: true 
    }; 

    return inQux; 
}); 

...並想在這個jsfiddle它的工作原理。作爲額外的優勢,指令的代碼現在更小......但我不知道你想在你的原始應用程序中實現什麼。

+0

是的,看起來如果我添加模板屬性,那麼一切工作幾乎沒有問題。 element.html(template [$ scope.item.type]); $ compile(element.contents())($ scope); 實際上,jsfiddle上的代碼示例是實際生產代碼的極大簡化。我需要的是指令應該在其範圍內的特定值上使用的更改模板。 – vansanblch 2013-04-25 05:47:30

+0

一種可能的方法是在模板內使用'ng-switch'指令,如[here](http://jsfiddle.net/lutze/Qsf92/4/)。 – Lutz 2013-04-25 08:13:44