2014-04-21 85 views
0

我遇到了動態生成的指令(使用函數)和角度表達式在屏幕上最終標記中過濾出來的問題。我創建了一個JSFiddle displaying the problem here動態生成的模板中缺少角度表達式

我正在動態生成模板,因爲我們需要一種基於元素內部屬性生成標記的方法。

基本上限定當表達式像這樣:

angular.module('ui.directives', []).directive('uiBar', function() { 
    return { 
     restrict: 'E', 
     template: function(element, attrs) { 
      console.log('hello'); 
      return '<div>lol: {{ user }}</div>'; 
     } 
    }; 
}); 

並將其放置到身體像這樣:

<div ng-app="myApp"> 
    <ui-bar>I should change to iambar</ui-bar> 
</div> 

將所得的標記是:

<div ng-app="myApp" class="ng-scope"> 
    <ui-bar><div class="ng-binding">lol: </div></ui-bar> 
</div> 

表達是由於某種原因剝離出來。有沒有人經歷過這個?

+0

您是否需要在視圖中顯示錶達式{{user}}?如果沒有,你可以在指令的(或它的父範圍)中定義'user',它將被顯示。它看起來像角無聲地編譯表達式,如果它無法找到名稱在範圍內(或父範圍)看看這個小提琴。 http://jsfiddle.net/qQPb6/ – javaCity

+0

下面是另一個示例,顯示它實際上工作:http://jsfiddle.net/EM9wv/7/發生什麼事情是,angularjs編譯了你指定的ng-bind指令通過使用'{{user}}' – JoseM

+0

也許Transclude可以與你想要的一起工作?鏈接:https://docs.angularjs.org/api/ng/directive/ngTransclude – SoEzPz

回答

0

我不太明白你要用動態生成的模板來完成什麼。以下是我通常會解決您的示例的方法。

HTML看起來像這樣。

<ui-bar new-value="hello">I should change</ui-bar> 

該指令的return語句會是這個樣子

return { 
    restrict: 'E', 
    template: "<div>lol: {{ user }}</div>", 

    link: function (scope, element, attrs){ 
    scope.user = attrs.newValue; 
    } // end link 
} // end return 

上面的代碼在你的jsfiddle。

如果您可以添加更多信息,我們可能會提供更多示例。