angular 2 como retornar dados de se inscrever

Isso é o que eu quero fazer.

@Component({ selector: "data", template: "

{{ getData() }}

" }) export class DataComponent{ this.http.get(path).subscribe({ res => return res; }) }

Se getData foi chamado dentro do DataComponent , você pode sugerir atribuí-lo a uma variável como this.data = res e usar i like {{data}} .Mas eu precisava usar como {{getData}} para meu próprio propósito.Por favor, sugira mim?

Você simplesmente não pode retornar o valor diretamente porque é uma chamada assíncrona. Uma chamada assíncrona significa que ela está sendo executada em segundo plano (na verdade, programada para execução posterior) enquanto seu código continua sendo executado.

Você também não pode ter esse código na class diretamente. Ele precisa ser movido para um método ou construtor.

O que você pode fazer é não se subscribe() diretamente, mas usar um operador como map()

 export class DataComponent{ someMethod() { return this.http.get(path).map(res => { return res.json(); }); } } 

Além disso, você pode combinar vários .map com os mesmos Observables, pois às vezes isso melhora a clareza do código e mantém as coisas separadas. Exemplo:

 validateResponse = (response) => validate(response); parseJson = (json) => JSON.parse(json); fetchUnits() { return this.http.get(requestUrl).map(this.validateResponse).map(this.parseJson); } 

Desta forma, um observável será retornar o chamador pode se inscrever para

 export class DataComponent{ someMethod() { return this.http.get(path).map(res => { return res.json(); }); } otherMethod() { this.someMethod().subscribe(data => this.data = data); } } 

O chamador também pode estar em outra class. Aqui é apenas por brevidade.

 data => this.data = data 

e

 res => return res.json() 

são funções de seta. Eles são semelhantes às funções normais. Essas funções são passadas para subscribe(...) ou map(...) para serem chamadas a partir do observável quando os dados chegam da resposta. É por isso que os dados não podem ser retornados diretamente, porque quando someMethod() é concluído, os dados ainda não foram recebidos.

Duas maneiras que conheço:

 export class SomeComponent implements OnInit { public localVar:any; ngOnInit(){ this.http.get(Path).map(res => res.json()).subscribe(res => this.localVar = res); } } 

Isto irá atribuir o seu resultado em variável local, uma vez que a informação é retornada como em uma promise. Então você acabou de fazer {{ localVar }}

Outra maneira é obter um observável como variável local.

 export class SomeComponent { public localVar:any; constructor() { this.localVar = this.http.get(path).map(res => res.json()); } } 

Desta forma, você está expondo um observável em que ponto você pode fazer no seu html é usar o AsyncPipe {{ localVar | async }} {{ localVar | async }}

Por favor, experimente e deixe-me saber se funciona. Além disso, como o angular 2 é bastante novo, sinta-se à vontade para comentar se algo estiver errado.

Espero que ajude

Eu usei desta forma muitas vezes …

 @Component({ selector: "data", template: "

{{ getData() }}

" }) export class DataComponent{ this.http.get(path).subscribe({ DataComponent.setSubscribeData(res); }) } static subscribeData:any; static setSubscribeData(data):any{ DataComponent.subscribeData=data; return data; }