以下是这种情况:我的实体具有许多不同的属性:标量,数组,对其他实体的引用等。每种属性类型都可以根据操作显示不同(创建,编辑属性定义,编辑属性值,视图)。每个属性由实体平等对待,通常通过迭代属性数组并创建通用属性指令来呈现。
属性指令检查链接函数中的属性类型和所需操作,获取适当的模板并编译它。这是一些伪代码:
myModule.directives('property', function() {
return function(scope, element, attributes) {
var template = fetchTemplate(scope.propertyType, attributes.action);
element.html($compile(template)(scope));
}
}
我应该把控制器逻辑放在哪里?目前,我通过ng-controller
为模板中的每个属性定义一个专用控制器,并将该控制器放入应用程序的控制器文件中。但我觉得逻辑应该进入指令本身。这是一个问题:我不能使用指令的控制器功能,因为那时模板还没有准备好。我应该在获取模板的同一链接函数中处理不同属性类型的所有逻辑吗?或者我应该为每个属性定义指令,然后在属性模板中声明这些指令? (这似乎似乎不正确,因为一个指令加载一个模板,声明另一个指令来执行控制器的东西)。
使用动态模板实现此目标的角度方式是什么?