在aurelia中获取子组件的路由

时间:2016-11-25 08:47:15

标签: aurelia aurelia-router

我不是Aurelia的主人,也不是初学者。 到目前为止,我没有解决我的问题,但我认为必须有一个希望简单的方法来做到以下几点:

我使用app.js和一些组件(例如admin.js ...)获得了一个非常基本的结构。 因为我想为所有组件的路由导航,我需要将这些路由到我的app.js. 简单或愚蠢的问题:我如何实现这一目标? 我试着简单地注入组件,但无论我做什么,我都无法访问路由器属性。

示例管理组件路由器:

configureRouter(config, router) {
    config.map([
      { route: '', name: 'default', moduleId: 'components/admin/default/default' },
      { route: 'roles', name: 'roles', moduleId: 'components/admin/roles/roles', title: 'Rollenverwaltung' },
      { route: 'users', name: 'users', moduleId: 'components/admin/users/users', title: 'Nutzerverwaltung' },
      { route: 'employees', name: 'employees', moduleId: 'components/admin/employees/employees', title: 'Mitarbeiterverwaltung' }
    ]);

    this.router = router;
}

我在我的应用组件中尝试了什么

static inject() { return [AuthService, Admin]; }

constructor(authService, admin) {
  this.auth = authService;

  this.adminRouter = admin;
}

我知道,只要我没有加载组件,管理员的路由器无论如何都是空的。但即使加载了组件,路由器对象也是未定义的。

A not running Gist更好地展示我想要的东西(希望如此)

也许我在这里得到了一些基本错误,并且不理解aurelia甚至js的工作方式?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果Admin组件本身未编写,则无法访问路由器,即使这样,父级也不会继承"继承"来自admin的路线。

如果您想在应用程序周围定义路线,然后将它们拉到一个地方,那么这样的事情对您有用 -

parent.js

import {Admin} from './admin';

export class Parent {
  static inject = [Admin];
  constructor(admin) {
    this.admin = admin;
    this.admin.routes.forEach(route => {
      this.router.addRoute(route);
    }
  }
}

admin.js

export class Parent {
  routes = [
    { route: '', name: 'default', moduleId: 'components/admin/default/default' },
    { route: 'roles', name: 'roles', moduleId: 'components/admin/roles/roles', title: 'Rollenverwaltung' },
    { route: 'users', name: 'users', moduleId: 'components/admin/users/users', title: 'Nutzerverwaltung' },
    { route: 'employees', name: 'employees', moduleId: 'components/admin/employees/employees', title: 'Mitarbeiterverwaltung' }
  ];
}