4

template使用属性而不是属性时,我遇到了一个奇怪的问题templateUrl

在后者的情况下,我可以定义多个具有隔离范围的指令或transclude单个元素上的选项。这按预期工作,我没有收到任何错误。

然而,当简单地复制模板并将其设置到template指令中时,Angular 突然开始抱怨多个指令请求隔离范围或对同一元素的嵌入。

看看我的这个笨蛋。它在控制台中引发错误。但是,如果您要替换(在 scripts.js 中)

template: "<ul kendo-menu k-orientation=\"'vertical'\" k-direction=\"'right'\"></ul>",

templateUrl: 'menu.html'

该指令有效(尝试右键单击文本)。HTML 文件的内容与字符串中的内容完全相同

有没有人知道为什么会发生这种不一致?

编辑:为避免混淆,我需要有 transclude 选项,因为我想重用这个元素并能够配置在每个单独使用的地方显示哪些元素。

4

3 回答 3

1

我无法重现该问题,但这里的问题实际上出在指令replace: true的定义中。menu

这意味着指令kendomenu指令都试图依次替换元素。保留menu包装可以解决问题:http ://plnkr.co/edit/vGhEVNfz35elCtxXSMxO?p=preview

于 2014-02-19T15:42:58.593 回答
1

问题出在transclude: true您还忘记<li>在模板中添加元素。如果replace: true已定义,它将用其子元素替换原始元素。

它对我有用,无论是使用template还是templateUrl更新的 Plunker

编辑: 关于这个有一个未解决的问题:https ://github.com/angular/angular.js/issues/4357

于 2014-02-19T18:13:26.733 回答
1

显然,这种不一致已在较新版本的 Angular 中得到修复。

我们正在使用1.0.8并且正确的行为(当多个指令需要对同一元素进行嵌入时抛出错误)仅在使用该template选项时发生。使用该templateUrl选项时,不会引发错误并且指令按预期工作(这仍然让我感到困惑)

编辑:使用该功能修复它compile并删除该replace选项。这里的工作示例 。

于 2014-02-20T07:14:13.663 回答