我有四个动态输入。用户选择想要的数量。 在输入中,他输入文章ID,成功后我在URL中发送。 网址只能包含两个或三个或四个
'http://someurl/' + ID + '/someParams'
example: 'http://someurl/991,992,993,994/someParams'
我将ID从html传递给控制器
$scope.submitChoice = function (name) {
$scope.choices.forEach(function(choice, index){
if(choice.name)
{
switch (index) {
case 0:
var firstId = choice.name;
break;
case 1:
var secondId = choice.name;
break;
case 2:
var thirdId = choice.name;
break;
case 3:
var fourthId = choice.name;
break;
}
console.log(firstId, secondId, thirdId, fourthId);
$scope.getBenchIdForCompare(firstId, secondId, thirdId,fourthId);
}
})
}
我使用SWITCH CASE
和INDEX
因为我需要将每个ID设置为唯一的var(因为我的应用程序的另一部分)。
问题是,当我在输入中提交输入的ID时,我在我的控制台中得到了这个
console.log(firstId, secondId, thirdId, fourthId);
控制台
991 undefined undefined undefined
undefined 992 undefined undefined
undefined undefined 993 undefined
undefined undefined undefined 994
我无法将此传递给另一个函数,因为我需要991 992 993 994
还有另一种方法吗?
答案 0 :(得分:2)
您可以改为使用map
并创建array
。创建array
后,您可以使用join()
方法加入它们,您将获得现成的逗号分隔字符串。可以添加此逗号分隔的字符串以获取所需的URL。
$scope.submitChoice = function(name) {
var choices = $scope.choices.map(function(choice){
return choice.name;
});
console.log(choices.join(','));
$scope.getBenchIdForCompare(choices[0], choices[1], choices[2], choices[3]);
}
ES6版本(使用点差运算符):
$scope.submitChoice = function(name) {
let choices = $scope.choices.map(choice => choice.name)
console.log(choices.join(','));
$scope.getBenchIdForCompare(...choices);
}
答案 1 :(得分:1)
这里发生的是你在选择数组的每个元素上调用函数。每个元素都有一个唯一的索引。这导致switch语句的情况对于每个元素只有一次为真。但是,由于您循环遍历选择数组,其他三个变量永远不会被赋予任何值。因此undefined
s
我建议将变量的声明及其用法移出forEach循环。只需使用forEach分配值,然后代码就可以正常工作