如何从提供程序传递命令以将root更改为所请求的组件?

时间:2017-12-18 14:48:54

标签: angular typescript ionic-framework http-post ionic3

在提供者中,我有一个代码:

//TaskProvider.ts
doJob(){
  let body = (....);
  let jsheader = new Headers();
  jsheader.append('Content-Type', 'application/json');
  this.http.post(this.baseUrl+'/createtask', body, { headers: jsheader })
    .subscribe( data => { data.json().this.that;

// want to setRoot from here or make a function to order component to changing root.
    }
  },
   err => { 
    // navigation for unsuccessful task 
   }
  }
}

Return PromiseObservable不起作用。哦是的,map也没有使用Response import

1 个答案:

答案 0 :(得分:1)

您需要在service内致电component提供商,然后再执行page transition(即setRoot())。不要在service内进行。这是非常糟糕的设计。

注意:您需要从subscribe中移除provider并在其中使用map,如下所示。

仅提取from this的示例。请根据您的使用情况进行更改。

getComments() : Observable<Comment[]> {

         // ...using get request
         return this.http.get(this.commentsUrl)
                        // ...and calling .json() on the response to return data
                         .map((res:Response) => res.json())
                         //...errors if any
                         .catch((error:any) => Observable.throw(error.json().error || 'Server error'));

     }

MY-component.ts

this.provider.doJob().subscribe(data => {
           //here do the page transition
    });