if应该只显示一个对象
ng-if should show only one object
嗨,亲爱的Stackoverflow社区,我有一个问题。首先是我的代码:
html:<md-card md-theme-watch flex="100" ng-repeat="offer in company.offers">
<md-button class="md-fab md-mini md-primary md-fab-oi" aria-label="copy" ng-click="company.setEditVisibility()">
<oi-offer-edit offer="offer" is-change="true" ng-if="company.isEditVisible">
</oi-offer-edit>
</md-card>
我的控制器:
function setEditVisibility(){
vm.isEditVisible = !vm.isEditVisible;
}
它工作得很好,问题是它为每个重复的对象显示i-offer-edit指令。如果你需要更多的信息,请不要犹豫,问!
如果你不想触摸你的标记,并希望oi-offer-edit
元素重复,你必须在offer
对象本身使用布尔属性:
<md-card md-theme-watch flex="100" ng-repeat="offer in company.offers">
<md-button class="..." ng-click="offer.formVisible = !offer.formVisible">
<oi-offer-edit offer="offer" is-change="true" ng-if="offer.formVisible">
</oi-offer-edit>
</md-card>
在我意识到之前的解决方案,你想在每个md-card
中都有该指令:
您可能希望将oi-offer-edit
元素放在ng-repeat
容器之外,因为据我在代码片段中看到的,您只需要一个具有所选company.offers
的offer
-数据的元素。
因此,您可以在单击处理程序上缓存offer
,并使oi-offer-edit
可见。像这样:
<md-card md-theme-watch flex="100" ng-repeat="offer in company.offers">
<md-button class="..." ng-click="company.setEditVisibility(offer)">
</md-card>
<oi-offer-edit offer="currentSelectedOffer" is-change="true" ng-if="company.isEditVisible">
</oi-offer-edit>
function setEditVisibility(selectedOffer){
vm.currentSelectedOffer = selectedOffer;
vm.isEditVisible = !vm.isEditVisible;
}
会的,因为你已经绑定了每个ng-repeat对象
如果你想独立于每个报价对象切换oi-offer-edit
的可见性,那么你应该将你在ng-if
指令中检查的布尔标志移动到报价数组中。
检查下面的例子,它将帮助你完成你想做的事情。
angular
.module('demo', [])
.controller('DefaultController', DefaultController);
function DefaultController() {
var vm = this;
vm.company = {
offers: [
{ id: 1, name: 'Offer 1' },
{ id: 2, name: 'Offer 2' },
{ id: 3, name: 'Offer 3' }
]
};
vm.setEditVisibility = setEditVisibility;
function setEditVisibility(id) {
for (var i = 0; i < vm.company.offers.length; i++) {
if (vm.company.offers[i].id === id) {
vm.company.offers[i].isEditVisible = !vm.company.offers[i].isEditVisible;
}
}
}
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="demo">
<div ng-controller="DefaultController as ctrl">
<div ng-repeat="offer in ctrl.company.offers">
{{offer.name}}
<button ng-click="ctrl.setEditVisibility(offer.id)">Toggle Edit Visibility</button>
<span ng-if="offer.isEditVisible">{{offer.name}} Edit Details</span>
</div>
</div>
</div>
相关文章:
- .effect('幻灯片'..不显示下一个对象
- 正在更改显示的<李>单击另一个对象
- 我想显示一个对象's在chrome中的值's控制台
- Javascript - 循环访问对象数组,仅显示最后一个对象
- OpenLayers 3 悬停每次仅突出显示一个指定的对象
- ng-repeat失败,并显示一个对象数组
- 为什么在控制台上记录对象引用时会显示一个整数
- 节点v0.10.36显示一个对象的原型
- for 循环仅显示数组中的最后一个对象
- 单击一个对象并显示另一个简单的jQuery片段
- 一个构造函数,其对象隐藏/显示一个html元素
- Angular模型值显示为一个对象
- 如何创建一个过滤器,在列出其他对象之前显示一个对象?
- 当用匿名函数括起一个对象时,显示错误消息
- 在AngularJS中显示一个大对象+处理更改
- 显示数组中的下一个对象值
- if应该只显示一个对象
- 如何在Javascript中添加一个对象时使字符串显示为数组返回到数组
- 我在一个对象中创建了两个不同的对象.在打印它们时,只显示最后修改的对象.如何创造
- 遍历数组的JavaScript/AngularJS只显示一个对象