网站搜索

typescript - 如何在 angular 2 中将一个组件的服务响应传递给另一个组件


我刚接触 Angular 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);
  }
}

我想在其他组件中获取 searchedResults 变量的结果,比如搜索详情,如何获取这个?

谢谢!

答案#1

您可以将搜索结果保存在您的 searchService 中,并从那里获取。为此,只需在您的服务中添加 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 直接绑定到输入框,要么为数据更改添加监听器。