Angularjs 如何在ng=";中插入自定义逻辑$最后一句话;

Angularjs 如何在ng=";中插入自定义逻辑$最后一句话;,angularjs,Angularjs,正如您在下面看到的,我使用ng repeat来迭代一系列产品,并在最后使用如下自定义指令 <div ng="$last" some-product-directive datajson=product></div> 本指令适用于另一种产品 some-product-directive datajson=product some-other-product-directive datajson=product 如何在ng repeat末尾的$last中插入该条件逻辑

正如您在下面看到的,我使用ng repeat来迭代一系列产品,并在最后使用如下自定义指令

<div ng="$last" some-product-directive datajson=product></div>
本指令适用于另一种产品

some-product-directive datajson=product
some-other-product-directive datajson=product
如何在ng repeat末尾的
$last
中插入该条件逻辑

<div ng-repeat="product in products">   
<div class="row">
<div class="col-md-1"><h2>{{ product.name }}</h2><input></input>{{product.date}}</div>

<div class="col-md-2"></div>
<div id="d{{::$id}}"></div>
</div>

<div ng="$last" some-product-directive datajson=product></div>
</div>
</div>

{{product.name}{{product.date}
更新
我的指令使用了一个隔离作用域,该作用域需要访问指令的
link
函数
link:function(作用域、元素、属性)
中的
elem[0]。previousElementSibling
。如果我对条件逻辑使用
ng If
(正如下面的答案中所建议的那样),它创建了一个子范围,那么
elem[0]。previousElementSibling
null
,并且指令不再有效。有解决方法吗?

使用奇妙的
ng if

<div ng-repeat="product in products">   
<div class="row">
<div class="col-md-1"><h2>{{ product.name }}</h2><input></input>{{product.date}}</div>

<div class="col-md-2"></div>
<div id="d{{::$id}}"></div>
</div>

<div ng-if="!$last" some-other-product-directive datajson="product"></div>
<div ng-if="$last" some-product-directive datajson="product"></div>
</div>
</div>

{{product.name}{{product.date}

显然,您可以将逻辑复杂化,并从
ng中引用控制器中的函数,如果这里有两个问题,似乎:

  • 如何仅为最后一次迭代的
    ng repeat
  • 如何根据
    产品
    的属性动态选择要呈现的HTML,并且仅针对上一次迭代
  • 这两个问题都可以通过使用条件呈现指令来解决,如
    ng if
    ng switch
    ng show
    /
    ng hide
    。前者触发是否将HTML插入DOM;后者仅触发CSS规则显示/隐藏

    所有这些指令都需要一个表达式并评估其真实性

    因此,你可以:

     <div ng-repeat="product in products">
        {{product.name}}
        <div ng-if="$last">
    
           <div ng-if="product.type === 'some'" 
                some-product-directive datajson="product"></div>
    
           <div ng-if="product.type === 'some other'" 
                some-other-product-directive datajson="product"></div>
    
        </div>
     </div>
    
    
    {{product.name}
    
    很抱歉,请您提供更多信息。我明白了$last
    $last
    ,那么布尔求反器
    是如何实现的呢控制逻辑?另外,我实际上有三个或四个指令要使用,所以布尔逻辑在那种情况下会工作吗(对不起,我应该在op中提到这一点)@brainlikedallpencil这就是我写最后一句话的原因。如果有更复杂的逻辑,可以执行
    ng if=“useDirectiveA()”directive-a=“product”
    。所有这些的目的是,根据您口述的逻辑,每次只选择一个div。好的,我会尝试一下,然后给您回复。您是第一个发布答案的人,因此如果答案正确,我将接受它。您是说
    useDirectiveA()
    返回true,然后将使用
    directive-a=“product”
    ?在另一个ng中,如果我运行
    useDirectiveB()
    ,如果返回true,那么将使用
    directive-b=“product”
    ?像这样:
    @brainlikedallpencil是的。如果
    ng如果
    的计算结果为false,则它所在的整个DOM元素将不会呈现,也不会出现。如果您的逻辑正确,那么对于
    ng repeat
    的每次迭代,只会呈现一个
    div
    元素,并且您可以为您想要的每个元素使用一个指令。这非常清楚,谢谢。我会尝试一下,稍后再接受(现在无法测试)这对我不起作用。我使用的自定义指令取决于能否从自定义指令的
    链接
    函数中的dom
    元素[0].previousElementSibling
    中选择元素。但是,对于您的代码,当我尝试选择它时,它在某种程度上是
    null
    。这是因为
    ng if
    创建了一个子范围。你的指令使用的是隔离范围吗?是的,我相信我是。在指令中,我执行app.directive('my-directive',function(){return{restrict:'AE',scope:{datajson:'='},
    另外,当我用运行的代码检查dom时,它会显示
    div.ng-isolate-scope
    ,而你的代码会显示
    div.ng-scope.ng isolate-scope
    。是否有修复方法?下面的答案是否解决了你的问题?@NewDev我还没有解决与元素不可用相关的问题。你的答案,同时通知我Tive提供了一个解决方案,但同时它也带来了一个新问题,因为ng if创建了一个子范围。我认为根据SO规则,接受它或其他答案作为解决方案是不合适的。嗯,这超出了问题的范围,imho,因为问题本身没有足够的细节来帮助解决它。您的问题不是wi这是一个子范围,但由于指令附近的DOM结构发生了变化,这表明设计有问题。好的,我接受你的答案。