Angularjs 如何在ng=";中插入自定义逻辑$最后一句话;
正如您在下面看到的,我使用ng repeat来迭代一系列产品,并在最后使用如下自定义指令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中插入该条件逻辑
<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结构发生了变化,这表明设计有问题。好的,我接受你的答案。