AngularJS 多指令资源争用

标签 angularjs angularjs-directive angularjs-scope

我正在尝试使用 Angular 构建指令。

这是plunker

我想把它分成 3 个指令:

  • 最高祖 parent 指令。 - 许多
  • 中,使用 ng-repeat 创建 - 一天
  • 底部,使用 ng-repeat 创建 - 许多时间 block

有 Angular 的 .directive('dateTimeBlocks', [function dateTimeBlocksDirective () {}]) .directive('dayBlock', [function dayDirective () {}]) .directive('timeBlock', [function timeBlockDirective () {}])

我想创建中间和底部指令 隔离范围,只传递我想要在内部修改的数据。

但是好像无法编译 “多个指令 [dateBlock, dateBlock] 要求模板:...”

任何意见都将不胜感激。

最佳答案

此行导致该错误:

<date-block data-date-block="datePeriod"></date-block>

原因是多种因素综合作用的。首先,AngularJS 总是规范化指令声明,因此 data-date-block (或 x-date-blockdata:date:block 等)实际上被视为 date-block 。因此,上面的行相当于:

<date-block date-block="datePeriod"></date-block>

现在,dateBlock指令声明为 restrict: 'AE' ,因此它可以用作元素或属性。因此,上面的行导致 AngularJS 应用 dateBlock向元素发出两次指令。

这本身不会导致错误,但是dateBlock声明了一个模板,而 AngularJS 不允许一个元素有 2 个模板(反正这没有意义,AngularJS 应该选择哪个模板?),所以它会抛出错误。

有多种方法可以修复它。

  1. 将指令限制为 E这样 AngularJS 就不会处理 data-date-block作为指令。

  2. 重命名隔离范围属性 dateBlock到别的事情。

  3. 使用指令的属性形式并使用<div>为元素形式。像这样:<div data-date-block="datePeriod"></div>

关于AngularJS 多指令资源争用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27084849/

相关文章:

javascript - 自定义指令未在指定的 DOM 位置呈现

css - 在 ngClass 中使用范围变量和动态 css

javascript - 如何在angularjs的ngDialog框中加载动态选项卡?

javascript - 如何构建对服务器的 Angular $resource POST 请求?

javascript - 如何在 Angular Js 中的类上编写指令?

javascript - AngularJS - jQuery 返回元素集合

javascript - 在函数开头向 $scope 声明空数组有什么用? (在 AngularJS 中)

javascript - data-ng-options 中的自定义 html 内容

angularjs - 使用 Angular JS 生成报告的可能选项

javascript - AngularJS 不拦截来自地址栏的直接请求