我正在尝试在angularJS中进行指令的自定义包含,因为我需要将两个单独的元素包含在两个单独的位置中。
问题是,即使在重新编译了具有正确作用域的元素之后,尽管在伪装内容工作中保留的某些伪指令(例如ng-bind
)仍然不起作用,而其他伪指令(例如ng-if
或ng-repeat
)却没有。
示例:http://jsbin.com/menakapoma/1/edit?html,js,output
如您在示例中所见,ng-bind
有效,但是ng-if
无效,即使它们都在相同的作用域上并且访问相同的值。 ng-if
的正确或错误状态均无效。
我相信这是因为ng-if
指令已被注释掉,但是,即使我将transclusion指令的优先级设置为9999
并在预链接功能中执行,它仍然不起作用。
有谁知道如何使这些指令起作用?
最佳答案
问题在于,无论何时transclude
函数执行嵌套指令时,已经被编译并替换为注释。
我已经设法通过完全省略transclude选项并通过$templateRequest
手动请求模板来实现此目的。
我指定了一个编译函数,该函数用注释占位符替换元素,以确保在请求期间不呈现任何内容。
在链接功能中,我手动编译模板,然后用它替换指令的元素。
在此处查看更新的示例:http://jsbin.com/rocedarono/3/edit?html,js,console,output
当然,这不是最干净/最佳的解决方案,我愿意接受其他任何可以做得更好的解决方案。特别是在解析$templateRequest
promise 并检查是否存在之前,必须绑定(bind)任何DOM事件,然后再删除$destroy
事件以确保事先解决。
关于javascript - AngularJS : ng-if and ng-repeat not working after custom transclusion,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30467793/