【发布时间】:2017-08-12 23:02:30
【问题描述】:
我的仪表板上有一个自定义指令列表,它们是不同的小部件。指令定义如下:
angular.module('core').directive('graphCardWidget', function() {
return {
restrict: 'E',
replace: true,
scope: {
target: '=target'
},
templateUrl: 'modules/core/widgets/graph-card.client.widget.html'
};
});
angular.module('core').directive('pieChartWidget', function() {
return {
restrict: 'E',
replace: true,
scope: {
target: '=target'
},
templateUrl: 'modules/core/widgets/pie-chart.client.widget.html'
};
});
在我的控制器中,我有一个要显示的小部件列表。名单如下:
$scope.dashboardWidgets = [
{
directive : 'graph-card-widget',
target : 'widgets.dashboards.activeDevicesCard'
},
{
directive : 'graph-card-widget',
target : 'widgets.dashboards.activeSessionsCard'
},
{
directive : 'pie-chart-widget',
target : 'widgets.dashboards.devices'
},
{
directive : 'pie-chart-widget',
target : 'widgets.dashboards.sessions'
}
];
现在在我看来,我使用ng-repeat 来迭代这个数组并显示项目。这是我的观点的代码:
<div layout="row" layout-wrap layout-align="center" layout-xs="column" ng-drop="true">
<div ng-repeat='widget in dashboardWidgets'>
<{{widget.directive}} ng-drag="true" flex='45' target='{{widget.target}}'>
</{{widget.directive}}>
<span flex='5'></span>
</div>
</div>
但浏览器会将其呈现为文本。这是我在 DOM 中得到的内容:
<div layout="row" layout-wrap="" layout-align="center" layout-xs="column" ng-drop="true" class="layout-wrap layout-xs-column layout-align-center-stretch layout-row">
<div ng-repeat="widget in dashboardWidgets" class="ng-binding ng-scope">
“<graph-card-widget ng-drag="true" flex='45' target='widgets.dashboards.activeDevicesCard’>”
<span flex="5" class="flex-5"></span>
</div>
<div ng-repeat="widget in dashboardWidgets" class="ng-binding ng-scope">
“<graph-card-widget ng-drag="true" flex='45' target='widgets.dashboards.activeSessionsCard’>”
<span flex="5" class="flex-5"></span>
</div>
<div ng-repeat="widget in dashboardWidgets" class="ng-binding ng-scope">
“<pie-chart-widget ng-drag="true" flex='45' target='widgets.dashboards.devices’>”
<span flex="5" class="flex-5"></span>
</div>
<div ng-repeat="widget in dashboardWidgets" class="ng-binding ng-scope">
“<pie-chart-widget ng-drag="true" flex='45' target='widgets.dashboards.sessions’>”
<span flex="5" class="flex-5"></span>
</div>
</div>
那么我该怎么做才能使指令呈现为标签而不是纯文本?
我看到了一些类似的问题,例如question 1、question 2,但它们都在标准 HTML 标记中添加了动态指令。我需要的是动态标签。
更新:
按照@cnexans 的回答后,我得到了部分工作。已绘制小部件,但未评估 target 属性,这会导致出现空白小部件。
这是问题所在:https://plnkr.co/edit/BGN6C4LAHguWthU4fGy0?p=preview
【问题讨论】:
-
看看这个 - 可能是重复的:stackoverflow.com/questions/23130430/…
标签: javascript angularjs angularjs-ng-repeat angular-directive