2015-03-03 138 views
1

我試圖使自定義指令顯示:如何在Angularjs指令中呈現html?

Will {{selectedAsset}} go {{red}} or {{green}}? 

它看起來像這樣在屏幕上:

AUD/USD will down(red color) or up(green color)? 

的{{紅}}和{{綠}}部分應該有它的自己的顏色。因此我試圖用一個具有所需類的跨度來包裝它。

但它不工作,下面是代碼:

<trade-header selected-asset="selectedAsset" red="widgetMessage.goDown" green="widgetMessage.goUp"></trade-header> 

var widgetMessage = { 
    "Trade_Header": "Will {{selectedAsset}} go {{red}} or {{green}}?", 
    "goUp": "up", 
    "goDown": "down"} 

myApp.directive("tradeHeader", function($sce) { 
    return { 
     restrict: "AE", 
     scope: { 
      selectedAsset: "=", 
      green:"=", 
      red:"=" 
     }, 
     link: function(scope, element, attrs) { 
      scope.green = $sce.trustAsHtml('<span class="goOrDonwLabel upGreen">' + scope.green + '</span>'); 
     }, 
     template: widgetMessage.Trade_Header, 
    } 
}); 

widgetMessage.Trade_Header需要是可變的事業設計。

這後果將是:?"AUD/USD will down or <span class="Green">up</span>?

我需要它被編譯爲HTML,有什麼建議

+0

我解決了類似的東西:http://stackoverflow.com/a/28347692/3641016但我用了一個過濾器介紹HTML。 – 2015-03-03 08:22:05

回答

0

你的HTML應該是在模板當你試圖在代碼操作HTML,這通常是你不使用模板的正確方法的標誌嘗試是這樣的:

<trade-header selected-asset="selectedAsset" red="widgetMessage.goDown" green="widgetMessage.goUp"></trade-header> 


var widgetMessage = { 
"Trade_Header": 'Will {{selectedAsset}} go {{red}} or <span ng-class="greenLabel">{{green}}</span>?', 
"goUp": "up", 
"goDown": "down"} 

myApp.directive("tradeHeader", function($sce) { 
return { 
    restrict: "AE", 
    scope: { 
     selectedAsset: "=", 
     green:"=", 
     red:"=" 
    }, 
    link: function(scope, element, attrs) { 
     scope.greenLabel = widgetMessage.goUp; // logic for setting green's class here 
    }, 
    template: widgetMessage.Trade_Header, 
} 
}); 
+0

但我認爲在t他的方式我會有更高的維護成本,因爲我有幾個類似的東西......它可能編譯到HTML呈現? – 2015-03-03 10:10:16

+0

你只是想改變{{red}}和{{green}}部分的樣式嗎?如果是這樣,你只需要動態地在這些元素上添加/刪除類,而不是生成html。如果你正在做一些比這更復雜的事情,並且HTML的結構需要改變,那麼這是一個很好的候選人,可以將它引入自己的指令中。 – Kaiden 2015-03-04 02:17:36