【问题标题】:In Angular2, how are service values returned?在Angular2中,服务值是如何返回的?
【发布时间】:2016-05-09 03:43:32
【问题描述】:

我在这里遵循 Angular2 的教程说明: https://angular.io/docs/ts/latest/tutorial/toh-pt4.html

在某一时刻,它指出要将服务的承诺信息返回给组件,需要以下语法:

getHeroes() {
  this._heroService.getHeroes().then(heroes => this.heroes = heroes);
}

虽然我是 Angular2 和 TypeScript 的新手,但我正试图准确地了解这里发生了什么。文档说:

我们的回调将组件的英雄属性设置为数组 服务返回的英雄。

我对括号中的内容感到困惑,特别是最终的“英雄”来自哪里。据我所知,这项服务不会返回“英雄”。相反,它从 mock-heroes 导入并返回 HEROES,它本身使用 Heroes 接口并返回 HEROES 数组。我看不到“英雄”(小写)。

“英雄”是即时创建的吗?有人可以更详细地解释每个部分的内容:

heroes => this.heroes = heroes

有吗?非常感谢。

【问题讨论】:

    标签: angular


    【解决方案1】:

    首先要记住的是方法heroService.getHeroes()不返回英雄,而是一个最终会解析的promise,返回英雄列表:

    getHeroes() {
        return Promise.resolve(HEROES);
    }
    

    然后让我们稍微剖析一下这行代码:

    this._heroService.getHeroes().then(heroes => this.heroes = heroes);
    

    也可以这样写:

    this._heroService.getHeroes().then(function(heroesFromPromise) {
        this.heroes = heroesFromPromise;
    });
    

    这意味着,调用_heroService.getHeroes() 方法,该方法返回一个promise。当 Promise 解决时,then 内部的回调将被调用,并带有 Promise 的结果。

    当发生这种情况时,将调用回调,该回调获取承诺 (heroesPromise) 的输出,并将其分配给 this.heroes 成员变量。

    【讨论】:

    • 啊,所以如果我理解正确的话,我们可以将“英雄”替换为输出变量并称它为什么? :this._heroService.getHeroes().then(xxx => this.heroes = xxx) 或更详细:this._heroService.getHeroes().then(promiseReturnValue => this.heroes = promiseReturnValue)
    • 是的,没错,xxx 是承诺的返回值,你可以给变量起任何名字,就像你提到的那样
    • 感谢您的帮助!
    • 谢谢,现在我明白了!这意味着我们也可以这样做:this._numberService.getNumber().then(num => this.num = num+24)
    • 你能解释一下 this.heroes 到底绑定了什么吗?如果我从 heros.component 中删除 heros:Hero[],它仍然会显示英雄列表。那么 this.heroes 绑定到返回函数的参数本身就是它从服务中获取的英雄列表吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2017-07-27
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多