如何在ng重复作用域内创建属性
How to create a property inside ng-repeat scope
我正在尝试制作一个可编辑的项目列表。每个项目都有一个编辑模式。
HTML:
<ul ng-controller="ItemCtrl">
<li ng-repeat="item in items">
<div class="edit-off" ng-hide="editMode">...</div>
<div class="edit-on" ng-show="editMode">...</div>
<button ng-click="toggleEdit()">Edit</button>
</li>
</ul>
JavaScript:
angular.module("app", [])
.controller("ItemCtrl", function($scope) {
$scope.items = [...]; // list of items
$scope.editMode = false;
$scope.toggleEdit = function() {
$scope.editMode = !$scope.editMode;
};
});
我知道这个代码是不正确的,因为我将editMode
附加到控制器作用域,而不是ngRepeat
作用域。使用此代码,每当我单击任何按钮时,所有项目都将进入编辑模式。
我只想让每个项目在其作用域中都有自己的editMode
属性,这样我就可以单独编辑它们。
将您的财产放在每个项目上:
<ul ng-controller="ItemCtrl">
<li ng-repeat="item in items">
<div class="edit-off" ng-hide="item.editMode">...</div>
<div class="edit-on" ng-show="item.editMode">...</div>
<button ng-click="toggleEdit(item)">Edit</button>
</li>
</ul>
angular.module("app", [])
.controller("ItemCtrl", function($scope) {
$scope.items = [...]; // list of items
$scope.toggleEdit = function(item) {
item.editMode = !item.editMode;
};
});
您可以这样使用$index
:
angular.module("app", [])
.controller("ItemCtrl", function($scope) {
$scope.items = [...]; // list of items
$scope.editMode = [];
$scope.toggleEdit = function(index) {
$scope.editMode[index] = !$scope.editMode[index];
};
});
HTML:
<ul ng-controller="ItemCtrl">
<li ng-repeat="item in items">
<div class="edit-off" ng-hide="editMode[$index]">...</div>
<div class="edit-on" ng-show="editMode[$index]">...</div>
<button ng-click="toggleEdit($index)">Edit</button>
</li>
</ul>
演示:https://jsfiddle.net/iRbouh/rftfx7j4/
您可以在每个项目中添加属性并使用它进行编辑。
$scope.items = [{name: 'misko', gender: 'male'},{name: 'misko1', gender: 'male'}];
angular.forEach($scope.items, function(obj) {
obj["editMode"] = false
});
在视图
<ul ng-controller="ItemCtrl">
<li ng-repeat="item in items">
<div class="edit-off" ng-hide="editMode[$index]">...</div>
<div class="edit-on" ng-show="editMode[$index]">...</div>
<button ng-click="item.editMode = !item.editMode">Edit</button>
</li>
</ul>
使用$index。
HTML:
<ul ng-controller="ItemCtrl">
<li ng-repeat="item in items track by $index">
<div class="edit-off" ng-hide="editMode">...</div>
<div class="edit-on" ng-show="editMode">...</div>
<button ng-click="toggleEdit($index)">Edit</button>
</li>
</ul>
JS:
angular.module("app", [])
.controller("ItemCtrl", function($scope) {
$scope.items = [...]; // list of items
$scope.toggleEdit = function($index) {
setEditMode($scope.items[$index]);
};
});
function setEditMode(item) {
item.editMode = false;
}
如@John的回答所述,为每个项目添加editMode属性。这是正在工作的Plunker:
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.items = [
{ id:2, ds: 'test1' },
{ id:2, ds: 'test2' },
{ id:2, ds: 'test3'}]; // list of items
$scope.toggleEdit = function($index) {
$scope.items[$index].editMode = !$scope.items[$index].editMode;
};
});
有很多方法可以实现这一点,请参见示例:
<ul ng-controller="ItemCtrl">
<li ng-repeat="item in items">
<div class="edit-off" ng-hide="editMode[$index]">{{editMode[$index]}}</div>
<div class="edit-on" ng-show="editMode[$index]">{{editMode[$index]}}</div>
<button ng-click="toggleEdit($index)">Edit</button>
</li>
var myApp = angular.module("myApp", [])
.controller("ItemCtrl", function($scope) {
$scope.items = ["aaa","bbb","ccc"]; // list of items
$scope.editMode = [true,true,true];
$scope.toggleEdit = function(index) {
$scope.editMode[index] = !$scope.editMode[index];
};
});
http://jsfiddle.net/Lvc0u55v/7052/
相关文章:
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 如何为通过ng-view指令或ng-controller指令创建的每个新作用域设置侦听器
- 为什么在创建作用域时将参数传递给anon函数
- JavaScript作用域:如何创建具有不同值的匿名函数
- 阻止控制器创建新的作用域对象
- 阻止“ng include”创建孤立的作用域.AngularJS
- AngularJS-由$scope创建的作用域何时执行$new()已删除.垃圾收集器或Angular负责处理它吗
- 如何创建作用域的动态、基于实例的对象文字
- 角度:创建可以调用作用域函数的自定义指令
- 作用域变量正在创建引用而不是新实例
- 作用域和将参数传递给动态创建的事件处理程序时出现问题
- 我应该如何创建一个作用域到另一个模型的主干集合
- 在AngularJS中创建子作用域的所有指令是什么
- IE是否为每个脚本标记创建新的作用域
- Javascript:从类内部创建全局作用域函数
- 从字符串创建的函数看不到父作用域
- '这'当创建函数存储在哈希中的JS对象时,其作用域为窗口对象
- ng如果在创建子作用域时打断网格
- 在AngularJS的1.3和2版中创建指令作用域的方式是一样的
- 访问Angular中通过隔离作用域创建的ng-model