Дополнительный вьюпорт в Aurelia

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


person Carvellis    schedule 21.10.2015    source источник


Ответы (2)


если для этого нет встроенной поддержки в aurelia, вы можете настроить ненужную точку просмотра на модуль, который имеет следующую логику:

import {noView, inject} from 'aurelia-framework';

@noView
@inject(Element)
export class HiddenViewPort {
  constructor(element) {
    this.element = element;
  }

  activate() {
    // hide the router-view element
    this.element.parentNode.classList.add('aurelia-hide');
  }

  deactivate() {
    // show the router-view element
    this.element.parentNode.classList.remove('aurelia-hide');
  }
}
person Jeremy Danyow    schedule 27.10.2015
comment
Это все еще в силе? Во-первых, декоратор @noView приводит к ошибке, но я мог бы сделать это с пустым (inlineView) шаблоном. Моя проблема: введенный элемент не является родителем элемента <router-view> (как я ожидал), а является элементом, для которого установлено aurelia-app. Таким образом, aurelia-hide присваивается его родителю, в моем случае это <body>. Я воспроизвел это в gist.run: взгляните на него, класс aurelia-hide установлен для элемента <html>. - person Daniel; 19.04.2016
comment
У меня такая же проблема. Кто-нибудь знает обходной путь? - person JoshKraker; 19.09.2016

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

import {inlineView} from 'aurelia-templating';

@inlineView('<template></template>')
export class EmptyViewModel {
}
person balazska    schedule 01.12.2016
comment
Использование @noView будет иметь тот же эффект - person balazska; 01.12.2016