Разница между store.select в конструкторе и до него в Angular 6?

Есть ли разница между выбором хранилища в конструкторе и перед ним?

1) export class SomeClass {
      myObservable$ = <Observable<MyObservableType>>this.store.select(fromReducers.getMyObservable);
      constructor(
        private store: Store<fromReducers.State>
      ) { }
    } 

2) export class SomeClass {
      myObservable$ = Observable<MyObservableType>;
      constructor(
        private store: Store<fromReducers.State>
      ) {
        this.myObservable$ = this.store.select(fromReducers.getMyObservable);
      }
    }

И почему в ngrx/store app-example используется второй вариант ?


person mr__brainwash    schedule 14.06.2018    source источник
comment
После некоторого осмотра я нашел эту запись что касается различий. Лично я предпочитаю второй метод, потому что его легче понять.   -  person Joseph Webber    schedule 14.06.2018
comment
В angular 6 вы можете передать параметр конструктору, и его область действия - это весь экземпляр класса.   -  person firegloves    schedule 14.06.2018


Ответы (1)


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

Длинные операции не должны идти ни в конструкторы, ни в объявления переменных.

Лучший вариант — получить данные в метод ngOnInit. То же самое для всех потенциально длительных операций.

Ознакомьтесь с документами по жизненному циклу Angular, чтобы лучше понять, что происходит за сцены

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

Но это не правило, это зависит от того, что делает ваш класс

person firegloves    schedule 14.06.2018
comment
Это не то, о чем он спрашивает. - person Joseph Webber; 14.06.2018
comment
а что он просит? - person firegloves; 14.06.2018
comment
Посмотрите, где он объявляет myObservable$, ему интересно, в чем разница между инициализацией с помощью this.store внутри конструктора и вне конструктора. - person Joseph Webber; 14.06.2018
comment
мне кажется, что он сказал store.select, это не декларация, я ошибаюсь? - person firegloves; 14.06.2018
comment
Хорошо, так какая разница? - person firegloves; 14.06.2018
comment
Я имею в виду, что в первом варианте я назначаю наблюдаемые перед конструктором. А во вторую - внутрь. И я не получаю данные. Это просто селектор. - person mr__brainwash; 14.06.2018
comment
результат почти тот же. если вы хотите точно определить разницу, вы можете отладить ее в своем браузере и посмотреть, какой оператор выполняется первым. Если операция выполняется быстро и вам не нужны данные во время создания экземпляра класса, предпочтительным способом должно быть использование ngOnInit, в противном случае вы также можете использовать одну из этих форм инициализации. - person firegloves; 14.06.2018