这就是我想做的。
@Component({
selector: "data",
template: "<h1>{{ getData() }}</h1>"
})
export class DataComponent{
this.http.get(path).subscribe({
res => return res;
})
}
如果getData
在DataComponent
内部被调用,你可以建议把它赋值给一个变量,比如this.data = res
,然后像{{data}}
那样使用i。但是我需要像{{getData}}
那样使用,以满足我自己的需要。请给我建议?
5条答案
按热度按时间dgiusagp1#
你不能直接返回值,因为它是一个异步调用,异步调用意味着它在后台运行(实际上是安排在稍后执行),而你的代码继续执行。
你也不能直接在类中有这样的代码,它需要被移动到一个方法或构造函数中。
您可以做的不是直接使用
subscribe()
,而是使用map()
这样的运算符此外,您可以将多个
.map
与相同的Observable组合在一起,因为有时候这样可以提高代码的清晰度,并保持代码的独立性。通过这种方式,将返回调用者可以订阅的可观察结果
调用者也可以在另一个类中,这里只是为了简洁。
和
是箭头函数。它们类似于普通函数。这些函数被传递给
subscribe(...)
或map(...)
,以便在响应数据到达时从可观察对象调用。这就是为什么数据不能直接返回的原因,因为当someMethod()
完成时,数据还没有收到。hujrc8aj2#
我知道有两种方法:
这会在返回信息后将结果赋给局部变量,就像在promise中一样。
另一种方法是获取一个observable作为localVariable。
这样你就公开了一个可观察的点,在这个点上你可以在html中使用AsyncPipe
{{ localVar | async }}
请试用一下,让我知道它是否有效。另外,由于angular 2是相当新的,如果有什么不对劲,请随时评论。
希望能有所帮助
dgtucam13#
将这个变量存储在一个可以在subscribe之外使用的变量中怎么样?
nnvyjq4y4#
使用pipe运算符&订阅getData()或在模板中使用异步管道,如..
dauxcl2d5#
我已经用过很多次了...
使用静态关键字,保存你的时间...这里你可以使用静态变量或直接返回你想要的对象...希望它会帮助你...快乐编码...