无法读取未定义的属性'toLowerCase'(Angularjs/JavaScript/Json)

Abs*_*ner 7 javascript ajax json angularjs

我正在构建Angular/Express应用程序,我使用控制器加载数据并尝试使用函数中的数据但是我在控制台中出错

无法读取未定义的属性'toLowerCase'

当我手动编写JSON数据时,它工作得很好.任何人都有这个错误,为什么会这样?

编辑:此外,我希望函数在点击时工作,当我想要它不在它加载时,我也使用listData视图中的数据所以我知道它已加载

调节器

var self = this; 
self.listData = [];

var self = this; 
self.listData = [];

$http.get('/myList')
.success(function (data) {
    self.listData = data;
    console.log(data);
})
.error(function (data) {
    console.log('Error: ' + data);
});

self.myFunc = function(){
    var map = self.listData.reduce(function (p, c) {
        p.set(c.name.toLowerCase(), c.surname);
        return p;
    }, new Map());

    console.log(...map);
}
Run Code Online (Sandbox Code Playgroud)

Dyl*_*eus 1

HTTP.GET 是一个异步函数

您可以调用将数据转换为小写的.success函数http.get。这样您就知道数据已到达。现在您可能太早执行此函数了,这意味着您的列表中还没有数据。

如果您尝试对数据运行 toLowerCase(),在实际检索数据之前,您将收到此错误。这是您在处理网络请求时要学习处理的事情之一。

例如,像这样编写代码就可以了。

   $http.get('/myList')
           .success(function (data) {
                self.listData = data;
                myFunc(listData);
                console.log(data);
           })
           .error(function (data) {
                console.log('Error: ' + data);
           });

 }

 function myFunc(){

    var map = self.listData.reduce(function (p, c) {
                p.set(c.name.toLowerCase(), c.surname);
                return p;
           }, new Map());

           console.log(...map);

 }
Run Code Online (Sandbox Code Playgroud)

  • 该函数在单击时执行,因此视图已加载数据已加载到视图中。当我控制台时 vm.word 工作正常。但只是不适用于功能。函数应该可以访问它,因为当我手动编写 vm.json 并与他一起使用时,它不会出现任何问题。 (2认同)