Ответы пользователя по тегу JavaScript
  • Как сделать подтверждение пароля на Angular 2?

    @denismaster
    Использовать ReactiveForms и валидатор, который сравнивает значение одного formControl с други formControl, вот так:
    const confirmPasswordValidator = (controlToCompare: AbstractControl) : ValidationFn => 
      (control: AbstractControl): ValidationResult => {
        let controlValue = control.value
        let anotherValue = controlToCompare.value
        if( controlValue!==anotherValue) return { confirmPassword: true } 
        return null
    }
    Ответ написан
    Комментировать
  • Как дождаться окончания запроса, инициированного в другом компоненте?

    @denismaster
    Несколько вариантов навскидку.
    1) Если FooterComponent расположен рядом с AppComponent, использовать EventEmitter=)
    2) Если же футер внутри AppComponent, то просто делаете Input-свойство внутри Footer, потом просто делаете биндинг.
    3) Создать Observable на основе события "storage", которое возникает при изменении localStorage. Подробнее тут и тут. Но следует учесть, что событие возникает на других вкладках.
    Ответ написан
    Комментировать
  • Целесообразно ли использовать Angular 4 на классическом PHP сайте, а не в роли SPA?

    @denismaster
    SEO возможно с использованием серверного пререндеринга и Angular Universal.

    А по скорости загрузки - достаточно большой сайт с использованием Lazy Loading и Ahead Of Time грузится вполне себе быстро, за секунду.

    Советую вам попробовать, возможно, у вас получится полностью перейти на SPA=)
    Ответ написан
    3 комментария
  • Как осуществить сборку Angular 2?

    @denismaster
    Webpack, а также следующие лоадеры: @ngtools/webpack для AOT, для JIT - awesome-typescript-loader, angular2-template-loader, angular-router-loader
    Ответ написан
    Комментировать
  • Можно ли динамически создавать lazy load роуты в Angular 4?

    @denismaster
    Нет. Приведу пример с использованием Webpack

    В случае JIT-компиляции используется такой плагин, как angular-router-loader.
    При работе сборщика он проходится по всем роутам, содержащим loadChildren и заменяет их на некоторое выражение:
    {
            loadChildren: () => new Promise(resolve => {
                (require as any).ensure([], require => {
                    resolve(require('./path/to/yourmodule').ModuleName);
                })
            })
    }

    После этого webpack может собрать их в определенные chunks - дополнительные js-файлы, которые содержат загружаемые модули.

    В случае AOT-компиляции, используется @ngtools/webpack, который выполняет аналогичную работу, при этом он еще компилирует все компоненты в файлы *.ngfactory.ts. После этого webpack также генерирует чанки с этими фабриками.

    В вашем же случае на этапе сборки значение не является константным, поэтому сборщик выдаст сообщение об ошибке.

    Для решения этой проблемы может помочь отложенная загрузка вручную, например.
    Ответ написан
    1 комментарий
  • Изучение React или Angular?

    @denismaster
    Angular 1, он же AngularJS - это устаревшая версия, не совместимая с другими

    Angular (он же Angular 2, его более новая версия Angular 4 и ожидаемые Angular 5 и 6) это современная версия, по сути большой фреймворк. Ориентирован на Enterprise-приложения, но может использоваться и в других видах проектов. Из плюсов - строгая типизация(Typescript), много всяких удобных средств для решения проблем доступно сразу, из коробки. Из минусов - достаточно большой размер бандла, но есть техники, как сделать его очень маленьким, а также не самые лучшие StackTrace при отладке. Активно разрабатывается и достаточно популярен.

    React - это не фреймворк, а по сути просто библиотека для работы с ui. Поэтому при работе с ней часто используются другие библиотеки, Redux, Flux, Mobx, Redux-Saga и другие. Из плюсов - высокая скорость рендеринга, популярность. Из минусов - необходимость поддержки зоопарка библиотек для приложения, многое не доступно и придется искать по просторам сети в поисках нужного пакета. Еще из минусов(но это очень субьективный минус) - JSX, и писанина HTML внутри js, что напоминает о не лучшем прошлом с php.

    Vuejs - более легковесна, чем react c его зверинцем или огромный angular, самая маленькая и очень быстрая.
    Также поддерживает компонентный подход. Шаблоны больше похожи на Angular, чем на React. Пока еще не популярна так сильно, как другие 2, но это скоро поменяется.

    Все 3 предназначены для решения одной задачи, а выбор между ними часто субьективен. Каждая из библиотек в чем то хороша, а в чем то нет.
    Ответ написан
  • Как расширить класс (добавить новый атрибут к объекту класса) программно?

    @denismaster
    можно stage['checked'] использовать.
    Либо (stage as any).checked
    Наконец, можно определить интерфейс IChecked и типизировать:
    stage: Stage & IChecked
    Ответ написан
    Комментировать