2015-03-03 94 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