Can';t在JavaScript中为对象的变量赋值
我试图在angular js中读取一个文件,如果数据读取成功,它将把内容分配给对象的一个变量,否则它将把“NA”分配给同一个变量Can';t在JavaScript中为对象的变量赋值,javascript,jquery,angularjs,arrays,object,Javascript,Jquery,Angularjs,Arrays,Object,我试图在angular js中读取一个文件,如果数据读取成功,它将把内容分配给对象的一个变量,否则它将把“NA”分配给同一个变量 function customer($scope, $http) { var i; $scope.courses = [{ name: "CSE", capacity: "CSE.txt" }, { name: "IT", capacity: "IT.txt" }, {
function customer($scope, $http) {
var i;
$scope.courses = [{
name: "CSE",
capacity: "CSE.txt"
}, {
name: "IT",
capacity: "IT.txt"
}, {
name: "ECE",
capacity: "ECE.txt"
}];
for (i = 0; i < 3; i++)
$http.get($scope.courses[i].capacity).then(function (success) {
$scope.courses[i].capacity = success.data;
}, function (error) {
$scope.courses[i].capacity = "NA";
});
}
var myApp = angular.module("myApp", []);
myApp.controller("customerobj", customer);
功能客户($scope,$http){
var i;
$scope.courses=[{
名称:“CSE”,
容量:“CSE.txt”
}, {
名称:“IT”,
容量:“IT.txt”
}, {
名称:“欧洲经委会”,
容量:“ECE.txt”
}];
对于(i=0;i<3;i++)
$http.get($scope.courses[i].capacity)。然后(函数(success){
$scope.courses[i].capacity=success.data;
},函数(错误){
$scope.courses[i].capacity=“NA”;
});
}
var myApp=angular.module(“myApp”,[]);
myApp.controller(“customerobj”,客户);
我尝试以正常的表格格式访问以下部分
<td>ng-repeat="course in courses">{{course.capacity}}</td>
ng repeat=“课程中的课程”>{{course.capacity}
但每次我这样做时,它都会抛出一个错误:“无法设置未定义的属性'capacity',并显示文件名。即使找不到文件,也应该将值更新为“NA”。但事实并非如此。请帮我解决这个问题将您的http服务调用封装在另一个函数中,如下面所示,并在循环中调用该函数,以便循环索引
i
值将在函数范围内保持不变
更新:
如果不需要单独的函数,也可以使用匿名函数
解决方案1
(i=0;i<3;i++)的{
(功能(索引){
$http.get($scope.courses[index].capacity)。然后(函数(success){
$scope.courses[index].capacity=success.data;
},函数(错误){
$scope.courses[index].capacity=“NA”;
});
}(一)
}
解决方案2
(i=0;i<3;i++)的{
服务呼叫(一)
}
函数serviceCall(索引){
$http.get($scope.courses[index].capacity)。然后(函数(success){
$scope.courses[index].capacity=success.data;
},函数(错误){
$scope.courses[index].capacity=“NA”;
});
}
将http服务调用包装到另一个函数中,如下面所示,并在循环中调用该函数,以便循环索引i
值将保留在函数范围中
更新:
如果不需要单独的函数,也可以使用匿名函数
解决方案1
(i=0;i<3;i++)的{
(功能(索引){
$http.get($scope.courses[index].capacity)。然后(函数(success){
$scope.courses[index].capacity=success.data;
},函数(错误){
$scope.courses[index].capacity=“NA”;
});
}(一)
}
解决方案2
(i=0;i<3;i++)的{
服务呼叫(一)
}
函数serviceCall(索引){
$http.get($scope.courses[index].capacity)。然后(函数(success){
$scope.courses[index].capacity=success.data;
},函数(错误){
$scope.courses[index].capacity=“NA”;
});
}
代码正确。但for循环不是。当您将console.log(i)添加到错误函数时,您会看到3。但是你的数组有3个成员。http请求是异步的。for循环不能等待其响应。使用Gangadhar Jannu溶液。代码正确。但for循环不是。当您将console.log(i)添加到错误函数时,您会看到3。但是你的数组有3个成员。http请求是异步的。for循环不能等待其响应。使用Gangadhar-Jannu溶液。使用让进入循环
for (let i = 0; i < 3; i++) {
......
}
for(设i=0;i<3;i++){
......
}
参考:
使用让进入循环
for (let i = 0; i < 3; i++) {
......
}
for(设i=0;i<3;i++){
......
}
参考:
我认为使用let-in-for-loop是处理此类情况的更好方法。
Let in循环可以将其重新绑定到循环的每个迭代,确保重新分配上一个循环迭代结束时的值,因此可以使用它来避免闭包问题
for (let i = 0; i<3;i++) {
}
for(let i=0;i我认为使用let in for循环是处理此类情况的更好方法。
Let in循环可以将其重新绑定到循环的每个迭代,确保重新分配上一个循环迭代结束时的值,因此可以使用它来避免闭包问题
for (let i = 0; i<3;i++) {
}
for(让i=0;i尝试包装$http.get in函数。中的闭包似乎有问题javascript@DarshakGajjar因为错误是“无法设置未定义的属性'capacity',这表示$scope.courses[i]
是未定义的
。因为这是循环的一部分,所以在我看来,它与我链接的$scope.courses[I]是重复的。courses[I]已经在数组定义中定义了吗?@SiddharthaChoudhury您可以检查浏览器控制台吗?错误在哪一行抛出?$scope.courses[I]。capacity=“NA”;-此行尝试包装您的$http.get in函数。中的闭包似乎有问题javascript@DarshakGajjar因为错误是“无法设置未定义的属性'capacity',这表示$scope.courses[i]
是未定义的
。因为这是循环的一部分,所以在我看来,它与我链接的$scope.courses[I]是重复的。courses[I]已经在数组定义中定义了吗?@SiddharthaChoudhury您可以检查浏览器控制台吗?错误在哪一行抛出?$scope.courses[I]。capacity=“NA”-这行它正在工作。先生,如果你不介意的话,你能解释一下吗?@SiddharthaChoudhury它被称为闭包。如果你把函数放在循环之外,每个索引变量都绑定到函数上,否则它们将共享同一个变量。我建议你看看这就是重复的解决方案。你应该相反,我们会投票以欺骗的方式结束这一次…@Andreas虽然基本概念是相似的,OP甚至在我们都发表评论后也无法理解上下文。然后只有我给出了答案。这是有效的。先生,如果你不介意的话,你能解释一下吗?@SiddharthaChoudhury它被称为