passing data using router

后端 未结 2 1305
庸人自扰
庸人自扰 2021-01-16 04:04

I have a problem with passing data to other component. Here is the example.

 onEdit(data) {
    this.router.navigate([\"/edit\", { state: data }], {
      re         


        
相关标签:
2条回答
  • 2021-01-16 04:36

    @batgerel, You has an error in your code. must be

    this.router.navigate(['./edit'], 
       { relativeTo: this.activatedRoute, state: { data } })
    

    And, if your component it's not the main app, in ngOnInit

       this.activatedRoute.paramMap.pipe(
                    take(1), //take(1) is for unsubscribe
                    map(() => window.history.state)
                ).subscribe(res => {
                    console.log(res.data)
                })
    
    0 讨论(0)
  • 2021-01-16 04:42

    I think you need to change your routing to something like below,

    you can use QueryParams for your scenario

     this.router.navigate(["/edit"], { 
          queryParams: { dataParam : value, dataPara2: value }
     });
    

    get the value by subscribing to ActivatedRoute in Component.

    this.route.queryParams.subscribe(params => {
         console.log(params['dataParam '],params['dataPara2']);
    });
    

    you can also remove the data param in Routing initialization.

    Edit

    If you have already a common service use that otherwise create service class like below,

    export class ServiceName {
        private data = new BehaviorSubject<any>([]);
    
        getData(): Observable<any> {
            return this.data.asObservable();
        }
    
        setData(param: any): void {
            this.data.next(param);
        }
      }
    

    then you can call the data methods in component before navigating the router, and get the data with getData() method.

      this.service.setData(data);
      this.router.navigate(["/edit", { state: data }], {
          relativeTo: this.activatedRoute
      });
    

    Hope this helps.. :)

    0 讨论(0)
提交回复
热议问题