Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在ng repeat范围内创建属性_Javascript_Angularjs - Fatal编程技术网

Javascript 如何在ng repeat范围内创建属性

Javascript 如何在ng repeat范围内创建属性,javascript,angularjs,Javascript,Angularjs,我正在尝试创建一个可编辑的项目列表。每个项目都有一个编辑模式 HTML: 我知道此代码不正确,因为我将editMode附加到控制器作用域,而不是ngRepeat作用域。有了这段代码,每当我点击任何按钮时,所有项目都将进入编辑模式 我只希望每个项目在其作用域中都有自己的editMode属性,以便我可以单独编辑它们。将您的属性放在每个项目上: <ul ng-controller="ItemCtrl"> <li ng-repeat="item in items">

我正在尝试创建一个可编辑的项目列表。每个项目都有一个编辑模式

HTML:

我知道此代码不正确,因为我将
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;
        };
    });
  • ... ... 编辑
角度模块(“应用程序”,[]) .controller(“ItemCtrl”,函数($scope){ $scope.items=[…];//项目列表 $scope.toggleEdit=函数(项){ 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>
  • ... ... 编辑

演示:

您可以在每个项目中添加属性并使用它进行编辑

 $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>

将editMode属性添加到每个项目中,如@John的答案中所述。 以下是工作流程:


有很多方法可以实现这一点,请参见示例:

<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>

事实上,我最终需要使用
angular.toJson()
将数据放入json中,因此在每个项目上使用额外的道具,如
editMode
,我如何摆脱它们?您可以使用另一个对象来维护状态,就像其他一些答案一样,或者只需在序列化对象之前执行
delete item.editMode
,在编辑列表(如添加和删除项)后,此操作是否有效?美元指数也会改变吗?
<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>
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;
}
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];
    };
});