gpt4 book ai didi

javascript - ng-repeat 在拼接上重复项目而不是显示最后一个项目

转载 作者:行者123 更新时间:2023-11-29 15:26:11 25 4
gpt4 key购买 nike

我有以下 ng-repeat效果很好。

<div ng-repeat="data in workflow.flow | orderBy:'+step_number'" ng-init="$stepIndex = workflow.flow.indexOf(data)">
{{ workflow.flow[$stepIndex].step_number }}
</div>

$scope.workflow.flow

[
{
"id":"1334f68db820f664",
"step_number":1,
"tasks":[ { "id":"1334f68e3f20f665" } ]
},
{
"id":"134967a5ba205f5b",
"step_number":2,
"tasks":[ { "id":"134972c5b420e027" } ]
},
{
"id":"1334f68e7d209ae6",
"step_number":3,
"tasks":[ { "id":"1334f68ef6209ae7" } ]
}
]

这是它在我的 html 中的显示方式:

1 
2
3

我有下面的函数,可以在数组中间添加一个步骤:

$scope.insertStep = function() {

var insertStepIndex = 1,
task_data = {"id": null, "step_number": (insertStepIndex+2), "tasks": []};

//go through each item in the array
$.each($scope.workflow.flow, function(index, step){
//if the step number is greater then the place you want to insert it into, increase the step numbers
if(step.step_number > $scope.workflow.flow[insertStepIndex].step_number) step.step_number++;
});

$scope.workflow.flow.splice((insertStepIndex+1), 0, task_data);

}

出于某种原因,id 为1334f68e7d209ae6 的数组已更改为step_number: 4但在 ng-repeat 中完全忽略了 get

这是显示的内容:

1
2
3
3

当我 console.log $scope.workflow.flow这是我看到的:

[
{
"id":"1334f68db820f664",
"step_number":1,
"tasks":[ { "id":"1334f68e3f20f665" } ]
},
{
"id":"134967a5ba205f5b",
"step_number":2,
"tasks":[ { "id":"134972c5b420e027" } ]
},
{
"id":null,
"step_number":3,
"tasks":[]
},
{
"id":"1334f68e7d209ae6",
"step_number":4,
"tasks":[ { "id":"1334f68ef6209ae7" } ]
}
]

有人知道为什么会这样吗?


下面是一段代码:

angular.module('app', [])
.controller('ctrl', function($scope) {
$scope.workflow = {
flow: [
{
"id":"1334f68db820f664",
"step_number":1,
"tasks":[ { "id":"1334f68e3f20f665" } ]
},
{
"id":"134967a5ba205f5b",
"step_number":2,
"tasks":[ { "id":"134972c5b420e027" } ]
},
{
"id":"1334f68e7d209ae6",
"step_number":3,
"tasks":[ { "id":"1334f68ef6209ae7" } ]
}
]
};

$scope.insertStep = function() {

var insertStepIndex = 1,
task_data = {"id": null, "step_number": (insertStepIndex+2), "tasks": []};

//go through each item in the array
$.each($scope.workflow.flow, function(index, step){
//if the step number is greater then the place you want to insert it into, increase the step numbers
if(step.step_number > $scope.workflow.flow[insertStepIndex].step_number) step.step_number++;
});

$scope.workflow.flow.splice((insertStepIndex+1), 0, task_data);

console.log($scope.workflow.flow);
}


});
  

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.14/angular.js"></script>
<div ng-app="app" ng-controller="ctrl">

<div ng-click="insertStep()">Insert Step</div><br /><br />

<div ng-repeat="data in workflow.flow | orderBy:'+step_number'" ng-init="$stepIndex = workflow.flow.indexOf(data)">
{{ workflow.flow[$stepIndex].step_number }}
</div>
</div>

最佳答案

这是因为 ng-init 只运行了一次,在更新数组时没有再次运行。我必须改用这个:

$scope.getIndex = function(data) {
return $scope.workflow.flow.indexOf(data);
};

像这样:

{{ workflow.flow[getIndex(data)].step_number }}

关于javascript - ng-repeat 在拼接上重复项目而不是显示最后一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38984791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com