Как передать параметр маршрута в качестве привязываемого значения в модель представления компонента (не в представление)

Я использовал навигацию по маршруту, где я получаю доступ к параметрам маршрута из активации.

app.ts

export class App {
   configureRouter(config) {
    config.map([
        { route: 'student/:id', name: 'student', moduleId: 'student',  nav: true, title: 'student', href: '#' }
    ]);
}

}

student.ts

export class Student {
    id;

activate(params) {
    this.id = params.id;
   }
}

Страница, на которую он перенаправляется, построена с использованием нескольких компонентов, которым необходимо передать этот параметр.

<template>
    <require from="grade" > </require>
    <h1> Student - ${id} </h1>
    <grade id.bind="id"></grade>
    <department id.bind="id"></department>
<template>

В моем представлении оценки он правильно получает идентификатор, когда я отображаю его в элементе html (после того, как я делаю его привязываемым в модели представления):

grade.html <span>${id}</span>

Но я не могу получить идентификатор в модели просмотра класса, т.е. grade.ts

    export class Grade{
      @bindable id;
        constructor() {
          console.log("id=", this.id};
 }

появляется как неопределенное. Я попытался получить к нему доступ через активацию, как и в студенте, но похоже, что шаблоны не активируются при загрузке страницы. Я думаю, что проблема не в маршрутизации, а в том, как получить доступ к привязываемым значениям в модели представления в целом. Я также пробовал однократный и двусторонний режимы привязки, и они дали одинаковые результаты.


person she    schedule 21.11.2017    source источник


Ответы (1)


Причина, по которой он не определен, заключается в том, что вы вызываете его в constructor. Связываемая переменная заполняется на этапе attached.

Если вы попытаетесь вызвать его в прикрепленном методе следующим образом:

attached() {
   console.log("id=" + this.id);
 }

Он должен быть заполнен.

Для получения дополнительной информации о жизненном цикле компонентов Aurelia нажмите здесь

person Jesse    schedule 21.11.2017
comment
Он также должен быть доступен в фазе bind(), которая происходит перед attach(). - person Jeff G; 21.11.2017