在非子组件Angular 2之间传递输入(搜索栏)的值

Posted

技术标签:

【中文标题】在非子组件Angular 2之间传递输入(搜索栏)的值【英文标题】:Transfer the value of input (search bar) between non-child components Angular 2 【发布时间】:2018-06-18 07:55:50 【问题描述】:

我想创建一个带有输入过滤器的用户列表。 我的 app.component.html 是这样的:

<header>
  <app-header></app-header>
</header>

<div class="col-md-3">
  <app-left-menu></app-left-menu>
</div>
<div class="col-md-8">
  <router-outlet></router-outlet>
</div>

标题是这样的

<div class="col-md-4">
    <input type="text" [(ngModel)]="headerFilter">
  </div> 

如何在我的 userList 组件中使用 headerFilter?

我知道@Pipe,我尝试:

管道

   export class BuildPipe implements PipeTransform 

  transform (values: any[], field: string, value: string): any[] 
    if (!values || !values.length) 
      return [];
    
    if (!value) 
      return values;
      
    return values.filter(it => it[field].indexOf(value) >= 0 );
  

和 UserList.componenet:

<div class="item" *ngFor="let user of users | build: 'firstname': filter">

但是我应该如何将值从标头输入传输到 userList?

【问题讨论】:

您可以使用可注入服务来移动和存储值吗? 你可以使用@Input看这个链接***.com/questions/34088209/… How to pass object from one component to another in Angular 2?的可能重复 看看这里:***.com/questions/46047854/… 【参考方案1】:

感谢所有回答!

我终于使用服务了

   import  Injectable  from '@angular/core';

@Injectable()
export class FilterService 
  headerFilter: string;

  constructor()  

  public getFilter(): string 
    return this.headerFilter;
  

  public setFilter(filter): void 
    this.headerFilter = filter;
  

和标题中的搜索框组件

    <div>
  <input #input type="text" (input)="update(input.value)">
</div>

searchbox.ts

   update (value) 
    this.filter.setFilter(value);
  

并列出喜欢

 <div class="item" *ngFor="let user of users | build: 'firstname': filterServ.getFilter()">

其中 build 是管道的名称

【讨论】:

【参考方案2】:

如果组件之间存在父子关系,可以使用@Input装饰器。否则使用ServicesBehaviourSubject。这些是基于优先级的以下方法:

    使用服务(最推荐)[example]。 使用 RxJS 库中的行为主题。 使用 Redux 进行状态管理。 使用浏览器存储(会话/本地),但最不推荐使用 数据安全。

【讨论】:

以上是关于在非子组件Angular 2之间传递输入(搜索栏)的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在角度2的组件之间传递用户输入数据?

Angular 2 与 <router-outlet> 组件通信

如何使用反应路由器将道具传递给非子组件?

使用服务 Angular 在组件之间传递数据

Angular UI在控制器之间传递数据[重复]

angular2 - 在组件之间传递数据对象