我在转发器中获得了重复数据'错误。我读到了可以通过索引跟踪的某个地方,但是一旦我这样做,我的所有对象标题和描述值都会重复。我需要为每个步骤定义唯一的标题,描述和资产数组。我怎样才能做到这一点?
var stepTemplate = {
assets:[]
}
$scope.item.steps = [stepTemplate];
$scope.addRow = function(){
$scope.item.steps.push(stepTemplate);
$log.debug('row added')
}
$scope.deleteRow = function(index){
$scope.item.steps.splice(index, 1);
$log.debug('row deleted')
}
$scope.addAsset = function(index){
$scope.item.steps[index].assets.push({'type':'textfile'});
}
$scope.deleteAsset = function(index){
$scope.item.steps[index].assets.splice(index, 1);
}
<div class="row" ng-repeat="step in item.steps">
<div class="well">
<button class="btn btn-danger pull-right" ng-click="deleteRow($index)">-</button>
<input type="text" ng-model="step[$index].title" name="{{field}}" class="form-control">
<textarea rows="7" ng-model="step[$index].desc" name="{{field}}" class="form-control"></textarea>
Add Assets
<div class="row" ng-repeat="asset in step.assets">
<!--asset html -->
</div>
<button class="btn btn-primary pull-right" ng-click="addAsset($index)">+</button>
<button class="btn btn-primary pull-right" ng-click="deleteAsset($index)">-</button>
</div>
</div>
答案 0 :(得分:2)
这是因为您每次都会向阵列添加相同的对象实例(stepTemplate
)。 Angular认为数组有多个条目,但它们都指向同一个对象实例。
此处的解决方案是创建模板的副本,并将副本添加到数组中,而不是模板本身。您可以使用angular.copy()
创建深层副本。
$scope.addRow = function() {
// create a deep copy of the step template
var newStep = angular.copy(stepTemplate);
// make any updates to it if necessary
newStep.foo = 'bar';
// add the new step to the list of steps, not the template itself
$scope.item.steps.push(newStep);
};