我正在尝试在angularJS中自定义转换指令,因为我需要将两个单独的元素转换为两个不同的位置。
问题在于,虽然某些指令延续了被转移的内容工作,例如ng-bind
其他人,例如ng-if
或ng-repeat
,但即使用正确的方式重新编译已转换的元素范围。
示例:http://jsbin.com/menakapoma/1/edit?html,js,output
正如您在示例中看到的那样ng-bind
有效但ng-if
即使它们都在同一范围内并且访问相同的值也不行。 ng-if
的真或假状态都不起作用。
我相信这是因为ng-if
指令被转换为注释,但即使我将transcluding指令的优先级设置为9999
并在预连接函数中执行它仍然会不行。
有谁知道如何使这些指令有效?
答案 0 :(得分:1)
问题在于,无论何时(function () {
////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/iron:router/lib/route.js //
// //
////////////////////////////////////////////////////////////////////////////////////////////////
//
var Url = Iron.Url; // 1
var MiddlewareStack = Iron.MiddlewareStack; // 2
var assert = Iron.utils.assert; // 3
// 4
/*****************************************************************************/ // 5
/* Both */ // 6
/*****************************************************************************/ // 7
函数执行,嵌套指令都已编译并替换为注释。
我设法通过完全排除转换选项,并通过transclude
手动请求模板来实现此目的。
我指定一个编译函数,用一个注释占位符替换该元素,以确保在请求期间不呈现任何内容。
在链接函数中,我手动编译模板,然后用它替换指令元素。
请在此处查看更新后的示例:http://jsbin.com/rocedarono/3/edit?html,js,console,output
它当然不是最干净/最佳的解决方案,我对任何其他可以做得更好的解决方案持开放态度。特别是在解除$templateRequest
承诺后,必须绑定任何DOM事件,并在$templateRequest
事件中删除之前检查它是否存在,以确保事先得到解决。