动态注入指令
Dynamically injecting directives
我有22种不同的方式来显示某种类型的模型。而不是让我的html有疯狂的吨if语句和我的作用域,我想为每个类型创建一个指令。我从一个地图得到指令,基于它是什么类型。函数如下:
$scope.getDirective = function (item) {
var templateDirective = getDirective(item.type);
var dir = '<' + templateDirective + ' listId="' + $stateParams.listId + ' item="item">'
return dir
}
getDirective是我正在使用的映射。
模板是这样的:
<div ng-repeat="item in templates | orderBy: sortOrder">
<div ng-bind-html="getDirective(item)"></div>
</div>
我遇到的第一个问题是,当把字符串放在一起时字符串看起来像这样
"<temp-ratings listId="1" item="item">"
我正在使用的地图工厂。
.factory('getDirective', [function () {
var templates = {
0: "temp-check",
1: "temp-title",
2: "temp-ratings",
3: "temp-ratings1_10",
4: "temp-short",
5: "temp-long",
6: "temp-log",
8: "temp-yes-no",
9: "temp-signature",
10: "temp-text",
11: "temp-multiple",
12: "temp-employee",
13: "temp-form",
14: "temp-calculated",
15: "temp-date",
16: "temp-time",
17: "temp-date_time",
20: "temp-qr",
21: "temp-barcode",
22: "temp-photo",
23: "temp-video"
}
return function (tempType) {
return templates[tempType]
}
}])
另一个问题是当我检查元素。它甚至没有尝试将其注入html。有人知道我做错了什么吗?
你可以编写一个自定义指令来动态编译其他指令,像这样:
.directive('tempDynamic', function ($compile, getDirective) {
return {
scope: {
item: '=tempDynamic'
},
link: function (scope, element, attrs) {
var templateDirective = getDirective(scope.item.type);
var html = '<' + templateDirective + ' item="item">';
var childElement = $compile(html)(scope);
element.append(childElement);
}
}
});
并像这样使用:
<div ng-repeat="item in templates" temp-dynamic="item"></div>
示例Plunker: http://plnkr.co/edit/r5GNjklVpdbn2ADs7oSf?p=preview
相关文章:
- 注入angularjs指令
- 将方法从控制器注入到未使用右变量调用的指令
- 如何将动态html与注入角度引导popover的指令一起使用
- 如何从指令的控制器调用依赖注入服务的嵌套方法
- 注入指令's同一指令中的控制器
- AngularJS:指令/依赖项注入
- 如何根据从下拉列表中选择的选项注入指令模板
- 如何将服务注入链接函数包含指令
- 在 angular2 指令中注入 angular1 服务
- 将 CSS 注入指令
- 简单指令不注入
- 在不注入$rootScope的情况下对指令中的角度事件做出反应
- 将服务注入指令 AngularJS 和数据绑定
- Angular 指令是否需要将依赖注入到控制器中
- 指令范围属性注入行为
- $scope不会使用点表示法从控制器注入/继承到指令
- 如何将数据库中的 html 标签注入到我的指令的模板中,实际上是动态定义模板的根元素/标签
- 使用 Directive 通过指令注入 HTML,使用 AngularJS 进行数据绑定
- 有棱角的如何将ui.select注入到使用xeditable的指令中
- 注入角度指令