javascript - 无法为 JavaScript 中的对象变量赋值

标签 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"
    }, {
        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);

我尝试以正常的表格格式访问以下部分

<td>ng-repeat="course in courses">{{course.capacity}}</td>

但每次我这样做时都会抛出错误:“无法设置未定义的属性‘容量’”并显示文件名。即使没有找到文件,也应该将值更新为“NA”。但这并没有发生。请帮帮我

最佳答案

将您的 http 服务调用包装在另一个函数中,如下所示,并在循环中调用该函数,以便循环索引 i 值将保留在函数范围内。

更新:

如果您不需要单独的函数,也可以使用匿名函数

解决方案1

for (i = 0; i < 3; i++) {
    (function (index) {
        $http.get($scope.courses[index].capacity).then(function (success) {
            $scope.courses[index].capacity = success.data;
        }, function (error) {
            $scope.courses[index].capacity = "NA";
        });
    } (i))
}

解决方案2

for (i = 0; i < 3; i++) {
  serviceCall(i)
}

function serviceCall(index) {
  $http.get($scope.courses[index].capacity).then(function (success) {
    $scope.courses[index].capacity = success.data;
  }, function (error) {
    $scope.courses[index].capacity = "NA";
  });
}

关于javascript - 无法为 JavaScript 中的对象变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42265567/

相关文章:

javascript - Vue.js + 元素 UI : How to set float attribute?

javascript - 在我的 Rails 应用程序中将具有评级值的组合框更改为 5 星级系统

javascript - 在 AngularJS 中的多个项目之间共享代码

javascript - Chrome 应用消息传递和 'loadstop' 与 .load() 计时

javascript - 如何获取 Font Awesome 5 图标作为光标

javascript - wordpress php 问题将 html 元素回显到页面

javascript - jQuery水平滑动选项卡机制

jQuery Facebox : Sends empty input field value

javascript - Angular 错误 [$injector :modulerr] when loading module

javascript - Angularjs $scope、数据绑定(bind)和变量更改。