如何将一个组件服务响应传递给角度2中的其他组件

时间:2017-09-07 09:08:19

标签: angular typescript

我是角度4的新手, 从一个组件中的服务器获取响应,我希望其他组件中的响应对象如何访问

app.component.ts:

export class AppComponent {
  selected;
  skipCount: number = 0;
  errorMessage: string;
  searchedResults: any;

  searchObj: Object = {
    skipCount: this.skipCount
  };

  onChange(newVlaue){
    console.log(newVlaue);
    this.selected = newVlaue;
  }

  constructor(
    private searchService: searchService,
    private router: Router) {}

  searchall() {
    console.log(this.searchObj);

    var searchData = this.searchObj;
    console.log(searchData);

    this.searchService.getSearchbyDistrictCategoryCity(this.searchObj)
      .subscribe(
        data => {
          this.searchedResults = data;
          console.log(this.searchedResults);
          this.router.navigate(['/searchdetails/'])
        },
        error => this.errorMessage = <any>error);
  }
}

我想在搜索详细信息等其他组件中搜索searchResults变量 怎么弄这个。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将搜索结果保存在searService中并从那里取回。为此,只需在服务中添加searchResults属性,并使用当前搜索结果进行更新。它看起来像下面这样:

export class SearchService {
  public searchResults;

  ... 
}

每当您想要更新搜索结果时,您都可以: ```

this.searchService.getSearchbyDistrictCategoryCity(this.searchObj).subscribe(data=>{
  this.searchedResults = data;
  this.searchService.searchResults = data; 
},error=>this.errorMessage= <any>error);

您还可以覆盖搜索功能,以便在服务中查找结果时自动更新searchResults属性。

在另一个组件中,您只需从服务

中使用该属性即可
this.searchedResults = this.searchService.searchResults;

如果您希望组件使用新日期自动更新,则必须将userService直接绑定到输入,或者为数据更改添加侦听器。