AngularJS:自定义转换后ng-if和ng-repeat不起作用

时间:2015-05-26 19:59:35

标签: javascript angularjs angularjs-directive transclusion

我正在尝试在angularJS中自定义转换指令,因为我需要将两个单独的元素转换为两个不同的位置。

问题在于,虽然某些指令延续了被转移的内容工作,例如ng-bind其他人,例如ng-ifng-repeat,但即使用正确的方式重新编译已转换的元素范围。

示例:http://jsbin.com/menakapoma/1/edit?html,js,output

正如您在示例中看到的那样ng-bind有效但ng-if即使它们都在同一范围内并且访问相同的值也不行。 ng-if的真或假状态都不起作用。

我相信这是因为ng-if指令被转换为注释,但即使我将transcluding指令的优先级设置为9999并在预连接函数中执行它仍然会不行。

有谁知道如何使这些指令有效?

1 个答案:

答案 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事件中删除之前检查它是否存在,以确保事先得到解决。