AngularJS多指令资源争用

AngularJS多指令资源争用,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我试图用angular构建一个指令 这是你的电话号码 我想把它分成3个指令: 上,祖父母指令。-许多天 中间,使用ng重复创建-一天 底部,使用ng repeat创建-多个时间块 有棱角的 .directive('dateTimeBlocks',[function dateTimeBlocksDirective(){}])。directive('dayBlock',[function dayDirective(){}]) .directive('timeBlock',[function t

我试图用angular构建一个指令

这是你的电话号码

我想把它分成3个指令:

  • 上,祖父母指令。-许多天
  • 中间,使用ng重复创建-一天
  • 底部,使用ng repeat创建-多个时间块

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

我想用 隔离作用域,只传递我要在内部修改的数据

但它似乎无法编译 多个指令[dateBlock,dateBlock]要求在以下位置上使用模板:


任何输入都将不胜感激。

这一行导致错误:

<date-block data-date-block="datePeriod"></date-block>
现在,
dateBlock
指令用
restrict:'AE'
声明,因此它可以作为元素或属性应用。因此,上面的行导致AngularJS将
日期块
指令应用于元素两次

这本身并不会导致错误,但是
dateBlock
声明了一个模板,并且AngularJS不允许一个元素有两个模板(不管怎么说,AngularJS应该选择哪个模板?),因此它会抛出一个错误

有几种方法可以解决这个问题

  • 将指令限制为
    E
    ,以便AngularJS不会将
    数据日期块
    视为指令

  • 将隔离作用域属性
    dateBlock
    重命名为其他名称

  • 使用指令的属性形式,并对元素形式使用
    。像这样:


  • 如果在同一指令中有一个模板和templateUrl,那么也可能会出现此错误

    i、 e:

    。。。
    模板:“你好,世界”,
    templateUrl:“MyTemplate.html”,
    ...
    

    希望这对某人有所帮助,错误消息不会立即指出这一点。

    哇,真是个疏忽。我尝试了所有可以想象到的指令属性组合:s非常感谢您发现了这一点!:]这个错误消息对我来说是误导性的,我无法想象其中一个会超过另一个。
    <date-block date-block="datePeriod"></date-block>
    
    ...
            template: '<div>Hello world</div>',
            templateUrl: "MyTemplate.html",
    ...