首页 > 解决方案 > 可重用的组件值结转到第 2 页/任何其他页面

问题描述

我有 search-component像下面的 html 片段这样的组件

 <form class="form-horizontal form-material" (ngSubmit)="Search()" id="carsearch" [formGroup]="bookCarForm"
      novalidate>
      <div class="row">
        <div class="col-sm search-input-align">
          <input [owlDateTime]="dt1" [min]="min" [owlDateTimeTrigger]="dt1" class="form-control" formControlName="start_datetime"
            placeholder="Start Date & Time">
          <owl-date-time #dt1></owl-date-time>
          <span class="input-group-addon"><i class="fa fa-calendar fa-search-align"></i></span>
        </div>

        <div class="col-sm search-input-align">
          <input [owlDateTime]="dt2" [min]="min" [owlDateTimeTrigger]="dt2" class="form-control" formControlName="end_datetime"
            placeholder="End Date & Time">
          <owl-date-time #dt2></owl-date-time>
          <span class="input-group-addon "><i class="fa fa-calendar "></i></span>
        </div>
        <div class="col-sm search-input-align">
          <div class="toggle" (click)=toggleTextBox()>
            <input type="checkbox" class="check" >
            <b class="b switch"></b>
            <b class="b track"></b>
          </div>
          <h4 id="door-delivery">Door Delivery</h4>
        </div>
        <div class="col-sm search-input-align address">
          <div *ngIf="!visability">
            <input class="form-control " formControlName="Enter_address" type="text" placeholder="Enter Address"
              >
          </div>
          <div *ngIf="visability">
            <select formControlName="p_location" class="form-control selectpicker" id="select-city" >
              <option data-tokens="" disabled>
                <h2>select any one </h2>
              </option>
              <option data-tokens="Delhi">
                <h2>Hebbal</h2>
              </option>
              <option data-tokens="Mumbai">
                <h2>Yelahanka</h2>
              </option>
              <option data-tokens="hyderabad">
                <h2>BTM</h2>
              </option>
            </select>
          </div>
        </div>
        <div class="col-sm search-input-align btn-book-now">
          <button type="submit" [disabled]="bookCarForm.invalid" class="btn btn-primary align-items-center btn-align">Book
            Now</button>
        </div>
      </div>
    </form>

search-component.ts如下所示

@Output() searchValues = new EventEmitter(); 
this.storage.set("values", this.Search.value);//storing values in local storage
this.searchValues.emit("values");

search-component是可重复使用的。目前,我在Page1选择值page1并重定向到page2. 在 page2 中,我也在使用这种形式。第 1 页中给出的所有值是什么,应该结转到第 2 页。所以我尝试了 EventEmitter 但它不是结转值。 我试过这个链接,但它没有帮助我。实现此输出的最佳方法是什么。任何人都可以帮助我。

标签: angulartypescript

解决方案


创建以下服务stored-data-service.ts

import {Component, Injectable} from 'angular2/core'
import {BehaviorSubject, Observable} from 'rxjs';

@Injectable()
export class StoredDataService {
  values:any;
  values$:BehaviorSubject<any> = new BehaviorSubject('');
  constructor(){}

  setValues(values){
   this.values = values;
   this.values$.next(values);
  }
} 

然后通过导入将其添加到您的app.modules.ts

import { StoredDataService } from "./stored-data-service.ts";

然后将其添加到 NgModule 中的 providers 数组中

@NgModule({
  declarations: [
  ...],
  imports: [
  ...],
  providers: [
  StoredDataService],
  bootstrap: [AppComponent]
})

search-component.ts现在通过将其添加到构造函数中将其注入到您的组件中,如下所示:

constructor (public storedDataService: StoredDataService){}

最后用它来添加数据

this.storedDataService.setValues(this.Search.value);//storing values in local storage

并且要在代码中的任何位置检索数据(即使在其他组件或服务中,这就是诀窍),您需要订阅 values$:

 const subscription = this.storedDataService.values$.subscribe( (values) => {
 //set a local variable here storing values in you component
 //...
 this.values = values
 console.log (values);
})

如果您要在另一个组件中再次使用服务 StoredDataService,请记住像以前一样将其注入构造函数并订阅 values$。每当您的代码的任何部分调用storedDataService.changeValues(...) 时,您订阅的任何地方都将执行您的下标回调,为您提供新值。

编辑

我更改了代码以添加 BehaviorSubject 和订阅,否则将无法正常工作


推荐阅读