Javascript AngularJS无法读取属性';发布列表';未定义的

Javascript AngularJS无法读取属性';发布列表';未定义的,javascript,angularjs,ecmascript-6,Javascript,Angularjs,Ecmascript 6,我试图使我的代码工作,但我没有运气。 这是我的代码: class ReleasesController{ constructor(API,$rootScope,$scope){ 'ngInject'; this.$rootScope = $rootScope; this.$scope = $scope; this.API = API; } $onInit(){ this.releasesLi

我试图使我的代码工作,但我没有运气。 这是我的代码:

class ReleasesController{
    constructor(API,$rootScope,$scope){
        'ngInject';
        this.$rootScope = $rootScope;
        this.$scope = $scope;
        this.API = API;
    }

    $onInit(){
        this.releasesList= [];
        this.API.all(this.$rootScope.type).get('').then((response) => {
            _.each(response, function (release) {
                _.each(release.releases, function (videorelease) {
                    this.releasesList.push({
                        name: release.name,
                        image: release.image,
                        views: videorelease.views,
                        hash: videorelease.hash,
                        episode: videorelease.episode
                    });
                });
            });
        })
    }
}

export const ReleasesComponent = {
    templateUrl: './views/app/components/releases/releases.component.html',
    controller: ReleasesController,
    controllerAs: 'rs',
    bindings: {}
};
这就是错误:

TypeError: Cannot read property 'releasesList' of undefined
    at eval (eval at <anonymous> (http://website.dev/js/final.js:127247:1), <anonymous>:33:21)
    at Function._.each._.forEach (http://website.dev/js/final.js:61512:9)
    at eval (eval at <anonymous> (http://website.dev/js/final.js:127247:1), <anonymous>:32:15)
    at Function._.each._.forEach (http://website.dev/js/final.js:61512:9)
    at eval (eval at <anonymous> (http://website.dev/js/final.js:127247:1), <anonymous>:31:11)
    at processQueue (http://website.dev/js/final.js:16648:37)
    at http://website.dev/js/final.js:16692:27
    at Scope.$eval (http://website.dev/js/final.js:17972:28)
    at Scope.$digest (http://website.dev/js/final.js:17786:31)
    at Scope.scopePrototype.$digest (chrome-extension://ighdmehidhipcmcojjgiloacoafjmpfk/dist/hint.js:1364:23) Possibly unhandled rejection: {}
TypeError:无法读取未定义的属性“releasesList”
在评估时(评估时)(http://website.dev/js/final.js:127247:1), :33:21)
at功能。每个功能。每个功能(http://website.dev/js/final.js:61512:9)
在评估时(评估时)(http://website.dev/js/final.js:127247:1), :32:15)
at功能。每个功能。每个功能(http://website.dev/js/final.js:61512:9)
在评估时(评估时)(http://website.dev/js/final.js:127247:1), :31:11)
在进程队列中(http://website.dev/js/final.js:16648:37)
在http://website.dev/js/final.js:16692:27
在范围内。$eval(http://website.dev/js/final.js:17972:28)
在范围内。$摘要(http://website.dev/js/final.js:17786:31)
在Scope.scopePrototype.$digest(铬)-extension://ighdmehidhipcmcojjgiloacoafjmpfk/dist/hint.js:1364:23)可能未处理的拒绝:{}
我试图调试它,但我不知道为什么变量
未定义
。 有人能给我解释一下吗?

关于箭头功能的说明:

箭头函数表达式的语法比函数短 表达式,不绑定自己的this、arguments、super或 新目标。这些函数表达式最适用于非方法 函数,它们不能用作构造函数

意味着,箭头函数将有助于在子对象/函数上没有唯一的对象实例->您的子对象/函数将保留您的父对象实例。这是可能的,因为ECMAScript6和它绝对不错。默认情况下,您的父实例
在JavaScript中的其他对象/函数中不可用,但通过使用arrow函数,您的父对象参数将解析为您孩子的对象/函数

$onInit(){
    this.releasesList= [];
    this.API.all(this.$rootScope.type).get('').then((response) => {
        _.each(response, (release) => {
            _.each(release.releases, (videorelease) => {
                this.releasesList.push({
                    name: release.name,
                    image: release.image,
                    views: videorelease.views,
                    hash: videorelease.hash,
                    episode: videorelease.episode
                });
            });
        });
    })
}
在ECMAScript 6之前,您需要使其与“全局”函数变量一起工作,如
self=this
,其中
var self
存储对象实例,并在子函数/对象中作为全局变量提供:

$onInit(){

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

    this.API.all(this.$rootScope.type).get('').then(function (response) {
        _.each(response, function (release) {
            _.each(release.releases, function (videorelease) {
                self.releasesList.push({
                    name: release.name,
                    image: release.image,
                    views: videorelease.views,
                    hash: videorelease.hash,
                    episode: videorelease.episode
                });
            });
        });
    })
}
有关箭头功能的说明:

箭头函数表达式的语法比函数短 表达式,不绑定自己的this、arguments、super或 新目标。这些函数表达式最适用于非方法 函数,它们不能用作构造函数

意味着,箭头函数将有助于在子对象/函数上没有唯一的对象实例->您的子对象/函数将保留您的父对象实例。这是可能的,因为ECMAScript6和它绝对不错。默认情况下,您的父实例
在JavaScript中的其他对象/函数中不可用,但通过使用arrow函数,您的父对象参数将解析为您孩子的对象/函数

$onInit(){
    this.releasesList= [];
    this.API.all(this.$rootScope.type).get('').then((response) => {
        _.each(response, (release) => {
            _.each(release.releases, (videorelease) => {
                this.releasesList.push({
                    name: release.name,
                    image: release.image,
                    views: videorelease.views,
                    hash: videorelease.hash,
                    episode: videorelease.episode
                });
            });
        });
    })
}
在ECMAScript 6之前,您需要使其与“全局”函数变量一起工作,如
self=this
,其中
var self
存储对象实例,并在子函数/对象中作为全局变量提供:

$onInit(){

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

    this.API.all(this.$rootScope.type).get('').then(function (response) {
        _.each(response, function (release) {
            _.each(release.releases, function (videorelease) {
                self.releasesList.push({
                    name: release.name,
                    image: release.image,
                    views: videorelease.views,
                    hash: videorelease.hash,
                    episode: videorelease.episode
                });
            });
        });
    })
}

我认为这个.releasesList已经改变了_.each函数中的上下文,这意味着它是未定义的。尝试使用arrow函数。使用fat arrow
=>
函数来保留
绑定。在ngOnInit()中使用它之前,您能否在构造函数之前声明releaseList,看看这是否有区别<代码>发布列表
Thank guys arrow函数起作用了。我认为这个.releasesList已经改变了3;中的上下文。每个函数都意味着它未定义。尝试使用arrow函数。使用fat arrow
=>
函数来保留
绑定。在ngOnInit()中使用它之前,您能否在构造函数之前声明releaseList,看看这是否有区别<代码>发布列表谢谢大家箭头功能工作正常。