How do I set/read a query string when using the router in aurelia?

前端 未结 3 1706
时光说笑
时光说笑 2021-02-05 16:35

When using the aurelia.io framework router, what is the preferred method for reading and setting a query string?

For example, in the url: http://www.myapp.com/#/my

相关标签:
3条回答
  • 2021-02-05 17:12

    On viewmodel you can implement method activate(params, routeConfig) and object params should contain your query variables

    activate(params, routeConfig){
     console.log(params.s); //should print mystate
    }
    

    To navigate to some route, you have to specify the name of this route in app.js (name: 'redirect')

     config.map([
          { route: ['','welcome'],  moduleId: './welcome',      nav: true, title:'Welcome' },
          { route: 'flickr',        moduleId: './flickr',       nav: true, title:'Flickr' },
          { route: 'redirect', moduleId: './redirect', name: 'redirect'}, 
          { route: 'child-router',  moduleId: './child-router', nav: true, title:'Child Router' }
        ]);
    

    and then use method NavigateToRoute with parameters.

    router.navigateToRoute('redirect', { s:'mystate'}, {replace: true});
    
    0 讨论(0)
  • 2021-02-05 17:16

    As per the latest configuration, the query string will not be retrieved if you didn't set the push state.

    Set push state to true. and add base tag in index.html.

    <base href="http://localhost:9000/"> - index.html

    config.options.pushState = true; - app.js -> configureRouter method.

    0 讨论(0)
  • 2021-02-05 17:17

    If you want to change queryParams and reload page with it (e.g. change page number on pagination link click) -- you must use determineActivationStrategy with replace.

    Create view model and add determineActivationStrategy function:

    import {activationStrategy} from 'aurelia-router';
    export class ModelView{
    
      determineActivationStrategy() {
        return activationStrategy.replace;
      }
    
    }
    

    Add activate event to your model for saving params:

    activate(params, routeConfig, navigationInstruction){
        this.queryParams = params ? params : {};
    }
    

    Add code for reload or navigate with same or new parameters:

    moveToNewPage(newPageNumber){
      this.queryParams.page = newPageNumber; // change page param to new value
      this.router.navigateToRoute(this.router.currentInstruction.config.name, this.queryParams);
    }
    

    P.S. for this.router access use inject and don't forget to set name of router in app configuration:

    import {Router} from 'aurelia-router';
    export class ModelView{
      static inject() { return [Router] };
    
      constructor(router){
        this.router = router;
      }
    }
    
    0 讨论(0)
提交回复
热议问题