angular - 可重用的组件值结转到第 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
但它不是结转值。
我试过这个链接,但它没有帮助我。实现此输出的最佳方法是什么。任何人都可以帮助我。
解决方案
创建以下服务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 和订阅,否则将无法正常工作
推荐阅读
- api - 将带有已发布 api 的 Windows Server exe 转换为用于 API 管理的 Web 服务
- powershell - Powershell 错误:使用“2”参数调用“批准”的异常:值不能为空
- reactjs - UI-Kitten 导航组件中 useStyleSheet 挂钩的无效挂钩调用错误
- python - 不能为 Dash 使用多个下拉列表
- javascript - 检测用户第一次输入和最后一次输入的时间,而不是介于两者之间
- javascript - 如何在 c# 中的 javascript 警报后发生事件
- windows - VSCode 打开时退出
- c# - 添加迁移不起作用,如何解决
- android - 如何在本机反应中使用全局变量?
- python-3.x - 在 GNU Radio 中使用两个 USRP 运行 gr 雷达时遇到问题