Ionic/Angular2 - 在 Page.ts 和 Provider.ts 之间插入一个 "mediator"
Ionic/Angular2 - Inserting a "mediator" between Page.ts and Provider.ts
我想知道它是否可能或至少是一个方向:
在我的 Home.ts 和我的 Provider.ts.
之间放一个 "mediator" 文件
例如:
在我的 Home.ts 上,我将调用一个 getJson()
方法,该方法将调用我的 Mediator getJson()
方法,该方法将调用我的 Provider getJson()
方法。
原因是,我认为这是对我收到的数据进行处理和改进的好方法。
这是我尝试过的极端失败和挫折....:'(
Home.ts
ionViewDidLoad(){
let observer: any = this.mediator.get().subscribe(
(response: any) => this.get_success(response),
(response: any) => this.get_fail(response));
}
private get_success(response: any): void {
console.log('Sucess!', response)
}
private get_fail(response: any): void {
console.log('Fail!', response)
}
HomeMediator.ts
get(): Observable<any>{
let observer = this.dataService.get();
observer.subscribe(
(response: any) => this.get_success(response),
(response: any) => this.get_fail(response));
return observer;
}
get_success(res: Object){
res['key'] = "VALOR";
console.log('Ok!', res)
}
get_fail(res: any){
console.log('Nops', res)
}
Provider.ts
public get(): Observable<Object> {
return this.http.get(this.url)
.map((response: Response) => response.json());
}
JSON 文件
{
"key": "value :D"
}
有什么帮助吗?我不一定需要使用 Observables.. 我仍在学习 Angular 和 Ionic... 感谢大家的帮助! o/
您在 Observable
上订阅了两次,这就是 可能 您的代码失败的原因。这是不应该做的。我将提供一个带有回调的替代方案。我不会添加您的 Provider.ts
,因为该代码没问题。
中介
// add two paramter callbacks
get(successCallback, errorCallback): void {
this.dataService.get().subscribe(
response => {
this.get_success(response);
// execute the callback function AFTER this.get_success is finished
successCallback(response);
}, error => {
this.get_fail(error);
errorCallback(error);
}
);
}
首页
ionViewDidLoad() {
// pass the functions to the mediator (without () )
this.mediator.get(success, failure);
}
success(response: any) { /* some code */}
failure(error: any) { /* some code */}
我想知道它是否可能或至少是一个方向: 在我的 Home.ts 和我的 Provider.ts.
之间放一个 "mediator" 文件例如:
在我的 Home.ts 上,我将调用一个 getJson()
方法,该方法将调用我的 Mediator getJson()
方法,该方法将调用我的 Provider getJson()
方法。
原因是,我认为这是对我收到的数据进行处理和改进的好方法。
这是我尝试过的极端失败和挫折....:'(
Home.ts
ionViewDidLoad(){
let observer: any = this.mediator.get().subscribe(
(response: any) => this.get_success(response),
(response: any) => this.get_fail(response));
}
private get_success(response: any): void {
console.log('Sucess!', response)
}
private get_fail(response: any): void {
console.log('Fail!', response)
}
HomeMediator.ts
get(): Observable<any>{
let observer = this.dataService.get();
observer.subscribe(
(response: any) => this.get_success(response),
(response: any) => this.get_fail(response));
return observer;
}
get_success(res: Object){
res['key'] = "VALOR";
console.log('Ok!', res)
}
get_fail(res: any){
console.log('Nops', res)
}
Provider.ts
public get(): Observable<Object> {
return this.http.get(this.url)
.map((response: Response) => response.json());
}
JSON 文件
{
"key": "value :D"
}
有什么帮助吗?我不一定需要使用 Observables.. 我仍在学习 Angular 和 Ionic... 感谢大家的帮助! o/
您在 Observable
上订阅了两次,这就是 可能 您的代码失败的原因。这是不应该做的。我将提供一个带有回调的替代方案。我不会添加您的 Provider.ts
,因为该代码没问题。
中介
// add two paramter callbacks
get(successCallback, errorCallback): void {
this.dataService.get().subscribe(
response => {
this.get_success(response);
// execute the callback function AFTER this.get_success is finished
successCallback(response);
}, error => {
this.get_fail(error);
errorCallback(error);
}
);
}
首页
ionViewDidLoad() {
// pass the functions to the mediator (without () )
this.mediator.get(success, failure);
}
success(response: any) { /* some code */}
failure(error: any) { /* some code */}