Angularjs 从指令添加指令的通用方法
我正在尝试编写一个Angular 1指令,它将动态地向元素添加其他指令。这些其他指令非常复杂,我不想将它们的代码复制并粘贴到这个元指令中。我已经创建了一个plnkr,显示了我正在努力实现的目标 这是指令的副本Angularjs 从指令添加指令的通用方法,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我正在尝试编写一个Angular 1指令,它将动态地向元素添加其他指令。这些其他指令非常复杂,我不想将它们的代码复制并粘贴到这个元指令中。我已经创建了一个plnkr,显示了我正在努力实现的目标 这是指令的副本 function myCustomAttribute($compile) { var priority = 1001; // greater than ng-repeat return { restrict: 'A', compile: compile, p
function myCustomAttribute($compile) {
var priority = 1001; // greater than ng-repeat
return {
restrict: 'A',
compile: compile,
priority: priority,
terminal: true,
};
function compile(templateElement, templateAttributes, transcludeFn) {
var attrValue = templateAttributes[attributeDirectiveName];
templateAttributes.$set(colorDirectiveName, attrValue);
var compiled = $compile(templateElement, transcludeFn, priority);
return function linkFn(scope) {
compiled(scope);
};
}
function doubleCompile(templateElement, templateAttributes, transcludeFn) {
var attrValue = templateAttributes[attributeDirectiveName];
templateAttributes.$set(colorDirectiveName, attrValue);
templateElement.removeAttr('my-custom-attribute');
return function linkFn(scope, element, attrs, ctrls, transcludeFn) {
$compile(element, transcludeFn)(scope);
};
}
}
compile
函数来自。如plnkr所示,它与具有transclude:true
和隔离作用域的指令一起使用时会出现问题。它在嵌套ng重复中也有问题
doubleCompile
函数来自。正如plnkr所显示的,它在具有更高优先级的双重编译指令方面存在问题。它也有同样的转移问题
plnkr是我试图在我的应用程序中解决的一个小型示例,除了myCustomAttribute指令之外的所有代码都用于突出显示问题。如何更新
myCustomAttribute
,使其在所有情况下都能工作?ng repeat本身就是一个非常糟糕的例子。你想做的事情在某个时候不可避免地会变得一团糟。不太实际,可能是XY问题。我一直在走这条路。这将是一个伟大的功能,但它目前还不可用。如果您需要,请为angular.js和ng2发出声音。还有,@estus,我认为这里有合法的用例。特别是为了将功能隔离到不同的乐高风格指令中,而不必每次使用时都在dom中添加一百万个不同的指令。@estus在我链接到的Angular文档中明确地调用了从指令以编程方式添加指令的场景。另外,我链接到的那个问题已经被浏览了8万多次。我不认为这是XY问题。@AaronPool这些功能请求看起来像我正在尝试做的。在实现这些功能之前,这个问题的答案可能是这是一个开放的功能请求。这个问题并不反映您的具体情况。这个主题很容易被误用,没有迹象表明这不是一个问题“通用方式”不是一种好的做事方式,因为它不是惯用的方式。该框架从未被设计为这样做。对于某些事情,您可能希望使用ng include
,对于另一些事情,它是自编译指令。目前被认为是惯用的方法是具有数据绑定和隔离作用域的指令/组件。不是一个神奇的东西,可以透明地包装每种类型的范围等等。