2015-07-30 4 views
14

При экспорте класса es6, который действует как модель представления в aurelia, я, похоже, могу установить код инициализации как в конструкторе, так и в функции активации.Aurelia class Constructor vs Activate

Существуют ли стандартные соглашения здесь?

Должен ли я выполнять определенную инициализацию в одном, но не в другом?

Есть ли функция активации для пользователей, не реализующих классы es6?

ответ

15

Вы можете установить свойства экземпляра в обоих конструкторах и активировать методы, оба они будут вызваны Aurelia. Однако здесь есть своего рода концептуальная разница.

Активация является одним из методов жизненного цикла активации экрана и в идеале должна использоваться для управления только режимом экрана/представления. Например, метод canDeactivate контролирует, можно ли просматривать модель модели просмотра и т. Д. Активировать - это также крючок, который выполняется непосредственно перед визуальной моделью (но до attached). Однако возможно, что метод activate никогда не будет вызван, скажем, маршрут перемещается в конструкторе или canActivate методы отклоняют/возвращают false - в этом случае конструкция все равно будет вызываться, но активировать не будет.

С другой стороны, метод construct вызывается перед любыми другими крючками и методами, поэтому он вызывается до activate. По этой причине конструкция является основным местом для настройки свойств конфигурации, поскольку она требует инъекций зависимостей. Таким образом, при активации принимает фиксированный набор параметров (params, routeConfig, navigationInstruction), список параметров, переданный методу constructor, зависит от того, какие услуги вы вводите в свой класс модели представлений.

+1

Я не могу найти документацию на сайте Aurelia, которая говорит об активации() или «canActivate()». Где эта информация? – lux

+2

Документация Aurelia по-прежнему довольно плохая. Но вы можете найти информацию здесь: https://github.com/aurelia/documentation/blob/master/English/docs.md#the-screen-activation-lifecycle – dfsq

+3

@dfsq: ваша ссылка не работает ... –

6

Одна большая разница, которую я вижу здесь, заключается в том, что метод активации имеет значение Promis как возвращаемое значение, поэтому вы можете запустить здесь асинхронный код. Запуск асинхронного кода в конструкторе - очень плохая идея. Более подробная информация заключается в том, что конструктор не должен генерировать исключение, поэтому здесь вы просто назначаете параметры конструктора локальным переменным без любой логики. Я бы не сделал больше материала в конструкторе, и фактическая инициализация видоискателя с логикой должна произойти в активировать или прилагается метод.