传递给Angular ForEach时返回Rx值不可用

时间:2017-10-28 01:39:19

标签: angularjs typescript rxjs

我订阅了一个Rx返回并将其传递给Angular.ForEach循环但它的值未定义。但是,我设法在console.log print上获得结果。

以下是调用打字稿代码

this.wordPressBlogPostRepository.getPortfolios().subscribe(
    (result) => {
        this.stopLoading();
        this.viewmodels = result;
        console.log(this.viewmodels);
        angular.forEach(this.viewmodels, function (value, key) {
            this.viewmodels[key].title.rendered = value.title.rendered.replace("Softinn Portfolios: ", "");
        });
    },
    (error) => {
        swal({
            title: 'Error',
            text: error,
            type: "error"
        });
        this.stopLoading();
    }
);

以下是错误消息:

未捕获的TypeError:无法读取未定义的属性“viewmodels”     在AngularControllers?v = rVYJl6CURXT7t6FM4ZFRtRuO0C-mN9uPa6W1ArXQ9301:1     在Object.t [asforEach]

如果我改为

,它会起作用
this.wordPressBlogPostRepository.getPortfolios().subscribe(
    (result) => {
        this.stopLoading();
        this.viewmodels = result;
        console.log(this.viewmodels);
        for (var blogCounter = 0; blogCounter < this.viewmodels.length; blogCounter++) {
            this.viewmodels[blogCounter].title.rendered = this.viewmodels[blogCounter].title.rendered.replace("Portfolios: ", "");
        }
    },
    (error) => {
        swal({
            title: 'Error',
            text: error,
            type: "error"
        });
        this.stopLoading();
    }
);

我错过了什么?我应该使用(完整)代替(结果)吗?

1 个答案:

答案 0 :(得分:1)

可能是因为您this函数中forEach的上下文。

您可以尝试:

angular.forEach(this.viewmodels, (value, key) => {
            this.viewmodels[key].title.rendered = value.title.rendered.replace("Softinn Portfolios: ", "");
        });

由于胖箭头功能保持this

的上下文