ngClick 仅用于列表中的 "this" 个元素 | AngularJS
ngClick for only "this" element in list | AngularJS
我有一个用户列表,如果用户单击每个人姓名旁边的 "edit" 图标,他们就会出现选项。
我想让用户一次只能编辑一个人,而不能同时编辑两个或更多人。
示例:如果用户选择编辑图标,则打开编辑选项。如果用户选择另一个人的编辑图标,关闭当前图标并向用户显示下一个选择的编辑选项。
我正在使用切换视图:
ng-click="editDetails = ! editDetails"
ng-class="{ 'unseen': ! editDetails }
这是我的代码:
<div class="col-xs-12 col-md-6 col-md-push-6">
<div ng-show="memberNeeded" class="message">Please add hunt group members</div>
<h4>Hunt group call order</h4>
<div class="list-box">
<ul id="finalList" ng-class="{disable: details.disabled}">
<li ng-repeat="item in list" switch data-id="{{item.id}}" data-active="{{item.isActive}}" class="clearfix {{control}}">
<strong>{{item.firstName}} {{item.lastName}}</strong>
<i class="vf-i vf-i-pen pull-right" ng-click="editDetails = ! editDetails"></i>
<div class="list-panel clearfix unseen" ng-class="{ 'unseen': ! editDetails }">
<p class="pull-left">
Active
</p>
<div class="pull-left">
<div class="toggle-bg switch-toggle {{control}}">
<label class="{{control}}">{{control}}</label>
<input type="radio" name="toggle" value="off" ng-model="control" ng-click="updateUser($index, 'off')">
<input type="radio" name="toggle" value="on" ng-model="control" ng-click="updateUser($index, 'on')">
<span class="switch {{control}}"></span>
</div>
</div>
<button class="btn btn-del pull-right">Remove</button>
</div>
</li>
</ul>
</div>
</div>
它不会工作,因为它会切换所有 classes。
如果我是你我会怎么做:
- 在您的 "item" 对象中添加一个变量 "editActive" 将其默认设置为 false
- 通过 ng-show="item.editActive"
更改您的 ng-class="..."
- 在你的控制器中创建一个变量 $scope.currentActive
- 在您的控制器中创建一个函数,该函数将由 ng-click 触发,它将获得 currentActive,如果有,则将其 editActive 值设置为 false。然后设置新的currentActive值,将其editActive设置为true
我觉得应该可以。
如果您一次只想激活一个编辑器,只需存储活动项而不是标志。在 ng-click 上设置 activeItem。示例如下:
在您的控制器中:
$scope.editor = {
activeEditItem: null
};
您的标记变为:
<div class="col-xs-12 col-md-6 col-md-push-6">
<div ng-show="memberNeeded" class="message">Please add hunt group members</div>
<h4>Hunt group call order</h4>
<div class="list-box">
<ul id="finalList" ng-class="{disable: details.disabled}">
<li ng-repeat="item in list" switch data-id="{{item.id}}" data-active="{{item.isActive}}" class="clearfix {{control}}">
<strong>{{item.firstName}} {{item.lastName}}</strong>
<i class="vf-i vf-i-pen pull-right" ng-click="editor.activeEditItem === item ? editor.activeEditItem = null : editor.activeEditItem = item"></i>
<div class="list-panel clearfix unseen" ng-class="{ 'unseen': editor.activeEditItem !== item }">
<p class="pull-left">
Active
</p>
<div class="pull-left">
<div class="toggle-bg switch-toggle {{control}}">
<label class="{{control}}">{{control}}</label>
<input type="radio" name="toggle" value="off" ng-model="control" ng-click="updateUser($index, 'off')">
<input type="radio" name="toggle" value="on" ng-model="control" ng-click="updateUser($index, 'on')">
<span class="switch {{control}}"></span>
</div>
</div>
<button class="btn btn-del pull-right">Remove</button>
</div>
</li>
</ul>
</div>
</div>
我有一个用户列表,如果用户单击每个人姓名旁边的 "edit" 图标,他们就会出现选项。
我想让用户一次只能编辑一个人,而不能同时编辑两个或更多人。
示例:如果用户选择编辑图标,则打开编辑选项。如果用户选择另一个人的编辑图标,关闭当前图标并向用户显示下一个选择的编辑选项。
我正在使用切换视图:
ng-click="editDetails = ! editDetails"
ng-class="{ 'unseen': ! editDetails }
这是我的代码:
<div class="col-xs-12 col-md-6 col-md-push-6">
<div ng-show="memberNeeded" class="message">Please add hunt group members</div>
<h4>Hunt group call order</h4>
<div class="list-box">
<ul id="finalList" ng-class="{disable: details.disabled}">
<li ng-repeat="item in list" switch data-id="{{item.id}}" data-active="{{item.isActive}}" class="clearfix {{control}}">
<strong>{{item.firstName}} {{item.lastName}}</strong>
<i class="vf-i vf-i-pen pull-right" ng-click="editDetails = ! editDetails"></i>
<div class="list-panel clearfix unseen" ng-class="{ 'unseen': ! editDetails }">
<p class="pull-left">
Active
</p>
<div class="pull-left">
<div class="toggle-bg switch-toggle {{control}}">
<label class="{{control}}">{{control}}</label>
<input type="radio" name="toggle" value="off" ng-model="control" ng-click="updateUser($index, 'off')">
<input type="radio" name="toggle" value="on" ng-model="control" ng-click="updateUser($index, 'on')">
<span class="switch {{control}}"></span>
</div>
</div>
<button class="btn btn-del pull-right">Remove</button>
</div>
</li>
</ul>
</div>
</div>
它不会工作,因为它会切换所有 classes。
如果我是你我会怎么做:
- 在您的 "item" 对象中添加一个变量 "editActive" 将其默认设置为 false
- 通过 ng-show="item.editActive" 更改您的 ng-class="..."
- 在你的控制器中创建一个变量 $scope.currentActive
- 在您的控制器中创建一个函数,该函数将由 ng-click 触发,它将获得 currentActive,如果有,则将其 editActive 值设置为 false。然后设置新的currentActive值,将其editActive设置为true
我觉得应该可以。
如果您一次只想激活一个编辑器,只需存储活动项而不是标志。在 ng-click 上设置 activeItem。示例如下:
在您的控制器中:
$scope.editor = {
activeEditItem: null
};
您的标记变为:
<div class="col-xs-12 col-md-6 col-md-push-6">
<div ng-show="memberNeeded" class="message">Please add hunt group members</div>
<h4>Hunt group call order</h4>
<div class="list-box">
<ul id="finalList" ng-class="{disable: details.disabled}">
<li ng-repeat="item in list" switch data-id="{{item.id}}" data-active="{{item.isActive}}" class="clearfix {{control}}">
<strong>{{item.firstName}} {{item.lastName}}</strong>
<i class="vf-i vf-i-pen pull-right" ng-click="editor.activeEditItem === item ? editor.activeEditItem = null : editor.activeEditItem = item"></i>
<div class="list-panel clearfix unseen" ng-class="{ 'unseen': editor.activeEditItem !== item }">
<p class="pull-left">
Active
</p>
<div class="pull-left">
<div class="toggle-bg switch-toggle {{control}}">
<label class="{{control}}">{{control}}</label>
<input type="radio" name="toggle" value="off" ng-model="control" ng-click="updateUser($index, 'off')">
<input type="radio" name="toggle" value="on" ng-model="control" ng-click="updateUser($index, 'on')">
<span class="switch {{control}}"></span>
</div>
</div>
<button class="btn btn-del pull-right">Remove</button>
</div>
</li>
</ul>
</div>
</div>