2017-02-23 249 views
0

Я читал this article где автор утверждает следующее:Почему компоненты Конструктор вызывается несколько раз, пока он должен быть повторно маршрутизатором

Чтобы избежать ненужных изменений DOM, маршрутизатор будет использовать повторно компоненты при изменяются параметры соответствующих маршрутов.

И он продолжает пример, где MessageCmp используется повторно. Как я понимаю, это не разрушен и воссоздан, следовательно, наблюдаемые используются для отслеживания chanages:

class MessageCmp { 
    message: Observable<Message>; 
    constructor(r: ActivatedRoute) { 
    this.message = r.data.map(d => d.message); 
    } 
} 

У меня есть следующие настройки маршрута:

path: 'tasks', 
component: ExTasksComponent, 
children: [ 
    { 
    path: '', 
    component: ExTaskListComponent, 
    }, 
    { 
    path: ':id', 
    component: ExTaskViewComponent, 

Так что я ожидал, что ExTaskViewComponent будет повторно используется при навигации от /tasks/3 до /tasks/4. Однако конструктор компонента выполняется каждый раз, когда происходит навигация? Я что-то упускаю?

Я плаваю, используя routerLink директивы.

+0

Я предполагаю, что он выгружает его, потому что маршрут «задач» имеет собственный компонент ref. Поэтому, когда он идет по дереву маршрутов, он выгружает ExTaskViewComponent, потому что он сначала встречает ExTaskComponent на корневом пути задач (;-)). Попробуйте удалить этот компонент по пути «задачи» – MikeOne

+0

@MikeOne, спасибо, я выяснил проблему. См. [Мой ответ] (http://stackoverflow.com/a/42418990/2545680) –

ответ

0

Проблема заключалась в том, что я имел следующие навигационные шаги:

/tasks/3 
/tasks 
/tasks/2 

И, следовательно, компонент получил уничтоженные при переходе на /tasks. Мне показалось, что состояние маршрутизатора сохраняется в течение некоторого времени и не уничтожается сразу же при навигации по текущему маршруту.