How to access child router in Aurelia?

前端 未结 2 513
再見小時候
再見小時候 2021-02-06 18:25

I have two child routers. I can navigate from one to other. But from the child router view, how can I navigate?

Below line of code gives the parent router instance.

2条回答
  •  不思量自难忘°
    2021-02-06 18:53

    To create a child router, create a new router on a child route in the same way you created a router on the parent route. Then, set the router as a property of the view model class so you can access it throughout your view model.

    import { Router } from 'aurelia-router';
    
    class ChildViewModel() {  
        configureRouter(config, router) {
            this.router = router;
            // router config
        }
        someOtherFunction() {
            this.router.navigate('somewhere');
        }
    }
    

    If you then want to use the child router in another view model, you can import it and use the router on the class (assuming that the class is a singleton, which it should be unless you configure it otherwise).

    import { inject } from 'aurelia-framework';
    import { ChildViewModel } from './child-view-model';
    
    @inject(ChildViewModel)
    class AnotherViewModel() {
        constructor(cvm) {
            this.externalRouter = cvm.router;
        }
        doStuff() {
            this.externalRouter.navigate('somewhere');
        }
        doOtherStuff() {
            ChildViewModel.router.navigate('somewhere else');
        }
    }
    

提交回复
热议问题