【发布时间】:2016-04-16 14:46:51
【问题描述】:
我正在使用ng-repeat 复制<div>。单击按钮时,会出现一个新的但重复的<div> 元素。问题是用户可以在列表中添加任务,当我复制 div 时,它也复制了内容。这是我重复的html:
<div class="row">
<div class="col" ng-repeat="input in inputs track by $index">
<div class="task-container">
<div class="content-task-container">
<div class="row">
<div class="input-field col s10">
<input id="task-input-{{$index}}" type="text" ng-model="task">
<label for="task-input-{{$index}}">Write task here</label>
</div>
<div class="btn-add">
<a class="btn-floating" id="btn-add-task"><i class="material-icons" ng-click="addTask(task)">add</i></a>
</div>
</div>
<div class=show-tasks ng-repeat="task in tasks track by $index">
<p>
<input type="checkbox" id="task-{{$index}}"/>
<label for="task-{{$index}}">{{task}}</label>
</p>
</div>
</div>
</div>
</div>
</div>
这里的控制器既处理列表中任务的添加,又处理 div 元素的复制:
app.controller('listCtrl', function($scope, $routeParams) {
$scope.owner = $routeParams.owner;
$scope.task = "";
$scope.tasks = [];
$scope.addTask = function(task) {
console.log(task);
$scope.tasks.push(task);
$scope.task = "";
};
$scope.inputCounter = 0;
$scope.inputs = [{
id: 'input'
}];
$scope.cloneContainer = function() {
console.log("inside cloneContainer()")
$scope.inputTemplate = {
id: 'input-' + $scope.inputCounter,
name: ''
};
$scope.inputCounter += 1;
$scope.inputs.push($scope.inputTemplate);
};
});
我试图给所有的 id 元素一个唯一的 id,但这并没有减少它。我还需要 'tasks' 数组对于ng-repeat 中的每个 div 元素都是唯一的。有什么办法可以做到这一点?
一个简单的 plunkr 来说明问题:http://plnkr.co/edit/LtWXUG6MKU5TGFTXpWUn?p=preview
【问题讨论】:
-
不清楚是什么问题或预期的结果是什么。请更新此演示以提供更多详细信息plnkr.co/edit/LtWXUG6MKU5TGFTXpWUn?p=preview
-
这个问题对我来说似乎很清楚。您的所有元素都共享相同的
$scope,因此它们获得相同的$scope.tasks,因此它们包含相同的数据。不要对需要单独作用域的数据使用共享控制器;将每个任务列表放入具有隔离范围的指令中,然后对该指令进行 ng-repeat。 -
感谢您的提示!你有一个简单的代码来说明如何开始吗?我试过用谷歌搜索一些,但老实说这很令人困惑......我是 Angular 的新手,我以前从未使用过指令。
-
您的主要问题是
tasks应该是inputs的子数组。然后将新任务推送到适当的子数组中
标签: javascript html angularjs ng-repeat