当前位置: 首页 > 面试题库 >

如何在AngularJS的同一元素上嵌套两个指令?

束帅
2023-03-14
问题内容

当我尝试在同一元素上嵌套两个指令时,出现以下错误。 嵌套的“ E”指令-要求新的/隔离范围的多个指令 ,我想嵌套两个“
E”隔离范围的指令,就像这个小提琴一样。(要真正重现该问题,您需要取消注释 指令)

我不断收到这个我不了解/不知道如何解决的错误:

Error: [$compile:multidir] Multiple directives [lw, listie] asking for new/isolated scope on: <listie items="items items">

这不行吗?谢谢!


问题答案:

remove replace: 指令名称为’lw’时为 true ..

那也应该解决。

更新小提琴:更新小提琴

app.directive('lw', function(){
    return {
        restrict: 'E',
        scope: {
            items: "="
        },
        template: '<listie items="items"></listie>',
        controller: function($scope) {
        }
    }
});

分析:

是什么原因引起的?

使用lw指令的replace = true会发生什么事,因为lw具有隔离作用域,现在作为replace =
true,试图将本身具有隔离作用域的替换元素在那里替换,因此您不知不觉中所做的就是尝试为两个作用域提供两个作用域相同元素的listie。

1.2.1版本的angular.js中的代码级观察:

第5728行:函数applyDirectivesToNode是在指令上执行编译的函数,在第5772行中,如果我们试图分配重复的作用域或换句话说,将相同的元素分配给两个作用域,它们将执行此检查。

function assertNoDuplicate(what, previousDirective, directive, element) {
      if (previousDirective) {
        throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}',
            previousDirective.name, directive.name, what, startingTag(element));
      }
    }

上面的函数进行检查,如果万一试图为同一元素分配两个作用域,它将抛出该错误。所以这就是它的设计目的,而不是错误。

为什么用replace:true清除解决问题?

通过删除replace:true,发生了什么事,而不是替换了新的指令listie而不是lw,它被附加到其中,因此这是一个嵌套到另一个隔离范围中,这是绝对正确和允许的。嵌套的隔离范围就像

<lw items="items" class="ng-isolate-scope">
   <div items="items" class="ng-isolate-scope">
        ..........
   </div>
</lw>

为什么在div中包装也可以工作(这是您认为的解决方法)?

需要注意的一点是div不是具有单独隔离范围的元素,它只是一个元素。在replace上,您正在将lw的隔离范围附加到div。(注意:div本身没有隔离范围),因此没有2个隔离范围附加到同一元素div。因此没有重复,因此断言步骤已通过并开始工作。

因此,这就是它设计的工作方式,绝对不是错误。



 类似资料:
  • 问题内容: 在使用Angular 2时,我遇到了一个问题:显然我不能在同一个DOM元素上放置两个结构化指令(,)。在Angular1中,这曾经起作用。对于例如: 当我尝试与Angular 2类似的东西时: 没发生什么事。甚至没有错误。 如果我将指令放在子元素上,它将起作用: 但是问题是我不想为此添加一个子元素。例如,如果它是表内的标记,则添加内部将使DOM怪异。 我知道Angular 2仍处于测试

  • 我想知道Jsoup中是否有任何方法可以区分同一类中的多个元素。为了澄清,请考虑下面的HTML片段,我需要检索类名“description”,但我需要区分一个信息和另一个信息。 谢谢大家!

  • 在使用Angular 2时,我遇到了一个问题:显然我不能将两个结构指令(,)放在同一个DOM元素上。 在Angular 1中,这曾经是有效的。例如: 当我用Angular 2尝试类似的东西时: 什么都没发生。甚至没有错误。 如果我将< code>ngIf指令放在子元素上,它会工作: 但问题是,我不想为此添加子元素。例如,如果它是一个<代码> 我知道Angular 2仍处于测试阶段,但我想知道它是否

  • 我正在为SeleniumWebDriver测试框架使用PageObject模式 在我的pageObject类中,我有多个使用驱动程序的方法。findElement查找同一页面上存在的相同webelement 例如: 我的问题是: 1.如何避免在相同的WebElement变量上多次使用driver.findElement。我想要一种方法,一旦我找到网络,我将在任何其他方法中使用变量,而不使用driv

  • 问题内容: 我已经看过其他几个问题,但似乎无法弄清楚它们中的任何一个,所以这是我的问题,我想要一个div或span,当您将鼠标悬停在它上面时,就会出现一个区域,就像是一滴水下。 例如我有一个div,我想将鼠标悬停在上面,并让它显示有关我悬停的项目的一些信息 但这似乎不起作用,我不知道为什么…,如果有办法在CSS中做到这一点,我想知道,但是我想要任何和所有建议。 问题答案: 仅当隐藏的div是用于悬

  • 问题内容: 假设我有一个对象,其键对应于产品,值对应于对象,对象又具有对应于那些产品已售出的价格点的键,以及对应于所售数量的值。 例如,如果我以1美元的价格出售10个小部件,以2美元的价格出售5个小部件,那么我将具有以下数据结构: 我想遍历这种结构并在这样的表中生成行: 在Python中,可以嵌套列表推导来遍历这样的列表数据结构。使用ng-repeat可以做到吗? 问题答案: ng-repeat目