Ответы пользователя по тегу Angular
  • Как новичку влиться в мир современного фронт-енда?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    с мнениями, что знания ангуляр1 "вредны".


    тут проблема в том, что если мы берем среднестатистического ангулярщика, он пишет в стиле angular1.0, во всю использует скоупы в контроллере и т.д. Причина этому - отсутствие обновления документации к ангуляру. Ну то есть в пул реквестах на гитхабе валяются исправленные доки но они почему-то до сих пор там висят не принятыми по каким-то странным причинам.

    Например вот то как я готовлю ангуляр, а вот как другие. Последнее считается вредным. Скажем если вы используете $scope в ангуляр приложении версии 1.5+ то вы уже готовите ангуляр не правильно. Если у вас бизнес логика вытекает в компоненты - тоже что-то странное и тд. Но последнее уже никак к ангуляру не привязано.

    Стоит ли тратить время дальше на jQuery?

    Учите javascript. и так и так понадобится. Причем серьезно учите. И не только основы, надо еще общие вещи, не привязанные к js знать. Типа ооп, функциональное программирование, принципы solid, grasp, dry и другие аббривиатуры. Короче именно серьезно так подойти к этим вопросам. Паралельно разобраться с HTTP, уметь не только пользоваться API но и проектировать их и т.д. Короче это огромный пласт знаний который формируется не один год.

    Стоит ли тратить время сейчас на Backbone?

    Нет, не стоит. Backbone это низкоуровневая библиотека для тех кто знает как все делать. Человеку который не отличает MVC от MVVM оно только навредит (у меня есть парочка проектов доставшихся от других разработчиков которые демонстрируют проблему).

    На сколько экосистема ReactJS стремительно изменяющаяся по сравнению с angular1-> angular2 ?


    С учетом того что с моммента выхода angular 1.x до момента выхода angular2 (а он еще в бэте) прошло 4 года... мегабыстро.

    Всё упирается в то, что времени/сил после работы на учебу не много остается и не хочется тратить их на то, что в последствии окажется "вредным".


    Просто учить нужно не фреймворк, а принципы на которых все это основано. Понимать идею. И тогда ничего не будет вредно. Большинство же разработчиков втупую копипастит код и радуется этому.
    Ответ написан
    1 комментарий
  • Как протестировать это в Angular?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вы уточните что именно вы хотите протестировать, сервис или контроллер?

    Сервис - $httpBackend мокаем (есть в доке). Контроллер - мокаем UserService.
    Ответ написан
    7 комментариев
  • Как написать директивы(компоненты) которые взаимодействуют друг с другом?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В этом примере директивы в дом дереве размещаются "одна в другой", в моем случае дом деревья директив не пересекаются.


    Значит и не должны они взаимодействовать напрямую.

    Схема строится так. Директива/компонент просит сервис изменить состояние, сервис меняет состояние и каким-то образом тригерится это дело (ивенты, релоад стэйта), отрабатывают ресолверы и загружают новый кусок стэйта. Это дело прокидывается в компоненты через биндинги.

    То есть в идеале компоненты понятия не имеют откуда приходит состояние, и сами не меняю его, просят сервисы это делать. Так изменения проходят по кругу и можно организовать любой уровень логики.
    Ответ написан
  • Почему при использовании Angular ссылки работают не так как я ожидал?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    при нажатии на ссыку меняется только url в браузере


    возможно потому что вы используете какой-нибудь ngRoute или uiRouter?
    Ответ написан
    5 комментариев
  • Как остановить отрпавку формы по enter в Angular?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    красиво - сложный вопрос.... Красиво эта проблема решена в Angular2, с использованием observable и т.д.

    А для 1.x можно пользоваться параметром timeout у запроса:

    var canceler = $q.defer();
    $http.post('/someUrl', {timeout: canceler.promise})
      .then(
        response => successCallback(response),
        reason => failCallback(reason)
    );
    canceler.resolve();
    Ответ написан
  • Как эффективно изучать angular js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) продолжаем учить "ванильный JS", паралельно почитывая про babel, es2015 и т.д.
    2) когда мы ищем информацию в интернетах - учитываем что сейчас актуальная версия ангуляра - 1.5, второй ангуляр в бете, так что 90% информации устарело. Я даже больше скажу - даже официальная документация устарела, обновленный вариант сможете найти на github проекта в пул реквестах.
    3) https://github.com/gdi2290/ngExam - рекомендую этот список тем того, что вам надо знать про ангуляр (ну и не только).
    4) https://github.com/AngularClass/NG6-todomvc-starter - тут я попытался собрать полезные статьи на тему что надо учить и как + пример маленького современного приложения. Так же в ишусах к NG6-starter обсуждается как лучше его готовить.
    5) https://habrahabr.ru/post/277087/ - про angular 1.5 и то как я готовлю ангуляр.

    Ну и так же не стоит пренебрежительно относиться ко всяким реактам и эмберам - идеология у всех приблизительно схожа, все крутые чуваки юзают компонентный подход (потому что это удобно и логично для проектирования интерфейсов), у всех примерно одинаковое виденье по поводу data-flow в приложениях и т.д. Так что с ними ознакомиться тоже можно, у реакта чуть больше расписано про компоненты например.

    Ну и да - обязательно прочитать документацию к ангуляру. Возможно не всю сразу но базовые понятия что бы раскрыть. И разобраться с тем что значит "декларативное представление".
    Ответ написан
    4 комментария
  • Как в React.js обновить компонент из вне? Или как связать React компоненты и Angular директивы?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    this.watchCollection


    Может вам не нужен раект? Может вам надо переосмыслить то, как вы делаете дела на ангуляре? Например заюзайте имутабельные структурки, и все сразу станет намного быстрее.

    Код React компонента:


    А вот код ангуляр компонента:

    class IstManagerListRowComponent {
        
    }
    export default {
        controller: IstManagerListRowComponent,
        bindings: {
             'uid': '='
        },
        template: `
            <div className="table-row">$ctrl.uid </div>
        `
    }


    а вместо ватчеров:

    class IstManagerListRowComponent {
        set uid(value) {
           this._uid = value;
           // do something
        }
    }


    Я сильно сомневаюсь что такое использование реакта вам хоть чем-то поможет. Если бы вы не внутри отдельных директив это делали, на например... сделали бы все компоненты на реакте. а состояние, роутинг и т.д. разруливали ангуляром - тогда да, профит был бы. А так - никакого профита, просто помимо накладных расходов на дерти чекинг ангуляра у вас добавляется накладные расходы на дерти чекинг реакта (между vDom и dom).
    Ответ написан
    Комментировать
  • Как правильно орагизовать SPA на Angular?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    возьмите uiRouter, там есть возможность делать иерархию вьюшек. Ну или component router если вы всеравно будете брать angular 1.5.

    Если вы еще не начали - рекомендую взять вот этот стартер (на правах рекламы).
    Ответ написан
    Комментировать
  • Как сделать директиву с динамическим шаблоном?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Я новичок в деле Angular.js и пока только разбираюсь с ним.


    Если вам надо содержимое блока заменять, то лучше делать вообще через transclude. А если просто что бы работало:

    вместо $attrs используйте скоуп

    scope: {
            content: '@uiTooltip'  
        },


    p.s. лучше возьмите готовую реализацию
    Ответ написан
    1 комментарий
  • Как скопировать элемент по клику на Angular?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) по ngClick вызываем какой-то метод контроллера
    2) в методе контроллера меняем состояние (айтем из одного массива перекидываем в другой или копируем или что вам там надо сделать).
    3) вьюшка волшебным образом перестраивается сама по изменению состояния данных, слава декларативности!

    Короч суть в том, что в ангуляре вы должны мыслить данными и управлением состоянием вашего приложения. А "элементы" - вы просто в шаблонах декларативно опиываете как должен реагировать UI на изменения. Например ngRepeat описывает как выводить айтем коллекции, это не тоже самое что цикл.
    Ответ написан
    1 комментарий
  • Можно ли уже использовать Angular2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Смотря какой проект. Если до релиза хотя бы MVP пара месяцев - лучше взять ng1.5 и потом мигрировать на 2.0, а если пол года - то можно сразу на двойке. Ну и так же зависит от того, что вам от ng2 нужно. Серверсайд пререндеринг? Тогда лучше второй сразу, но учитывайте риски.
    Ответ написан
    Комментировать
  • Могу ли я как то сделать два компонента, чтоб роуты проходили сначала через один, а потом через другой на Angular2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А теперь давайте перечитаем что вы написали и подумаем. Если у вас есть AppComponent, который вроде как все ваше приложение, но есть какой-то компонент (LoginForm) который имеет отличный от AppComponent лэйаут и т.д. то логично предположить что AppComponent это не совсем "компонент верхнего уровня" и т.д.

    Авторизация (а точнее авторизован ли чувак) проверяется в ресолверах маршрутов а не в компонентах.
    Ответ написан
  • Что означает эта запись?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    это имя модуля. Вы объявляете модуль с названием "controllers.ckeditor", который зависит от модуля "ckeditor".

    ну и да - получше поучите ангуляр. И если собираетесь его именно учить - пока игнорируйте доку на оффсайте и полазайте на github в официальном репозитории. Там в пулреквестах доку конкретно переписали уже.
    Ответ написан
    1 комментарий
  • Как правильно передать $scope из дочернего контроллера?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Как правильно решить данную задачу?


    Не используйте $scope вообще. Вот вообще. Не инджектите его в контроллеры, и тем более в сервисы. Единственное место где это должно быть - link директив, которые работают с DOM (и то для простых проектов даже это не нужно делать, ибо директивы-примитивы вроде ngHide/ngIf покрывают большую часть кейсов).

    Не используйте ngController, вообще. Нынче angular 1.5, используйте компоненты и биндинги. Тогда данная задача решается уже при помощи биндингов, наследования скоупов и т.д.
    Ответ написан
    3 комментария
  • Как правильно реализовать счётчик непрочитанных сообщений?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    для начала определитесь с определением "прочитанное сообщение". Когда оно должно считаться прочитанным. А там далее уже делайте.

    p.s. не unreadCount а countUnread, так оно как-то приятнее звучит.
    Ответ написан
    Комментировать
  • Как получить значение текущего изменяемого элемента массива?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Время рефакторинга!


    $scope._url = "";
    $scope._login = "";
    $scope._password = "";


    Вы же знаете что есть controllerAs который рекомендуется использовать согласно angular styleguide и всем остальным существующим бест практис? (объяснение чем черевато не использовать оное читать в том же angular-styleguide).

    $scope.sortFunc = function (a, b) {
        if (a.id> b.id) {
          return 1;
        }
        if (a.id< b.id) {
          return -1;
        }
        return 0;
      };


    Вы же знаете что в ангуляре есть встроенный фильтр orderBy?

    function AppCtrl(orderByFilter) {
        this.foo = orderByFilter(collection, 'id');
    }



    var inc = 1;

    if(tempArr.length > 0){
    var lastItem = tempArr.last();
    inc = lastItem.id+1;
    }


    вы же знаете что это не гарантирует уникальность, и может вызывать проблемы? Для таких вещей удобнее использовать какую-либо реализацию UUID (CUID например: https://github.com/ericelliott/cuid)

    Ну и да - ватчер вам тут не нужен так как вы точно знаете когда у вас что произошло. И бейте себя по рукам каждый раз как ставите у ватчера true третьим аргументом.
    Ответ написан
    2 комментария
  • В чем разница между map, observable, subscribe, Promise?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    map - для каждого результата
    toPromise - преобразовать Observable в промис
    subscribe - подписаться на изменения в observable

    разница между observable и промисами - промисы отрабатывают только один раз, observable можно перезапускать множество раз. То есть вместо того что бы запоминать конфиг, мы буквально создаем объект, описывающий запрос (до вызова subscribe/map запрос реальный не отправляется). Если у вас отвалилась сеть и мы хотим повторить запрос - достаточно еще раз вызвать метод объекта, а не создавать новый запрос. Банально удобнее, особенно в плане реюза кода (можно сделать на уровне сервиса перехватчик запросов, который бы хэндлил за нас такие ситуации).
    Ответ написан
    Комментировать
  • Вопрос про архитектуру приложения и ngRoute?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    https://habrahabr.ru/post/277087/

    если коротко:

    - прекращайте использовать ngController, используйте компоненты. Желательно stateless компоненты.
    - получение данных - в ресолверах (resolve)
    - проброс данных - через биндинги компонентов
    - для проектов чуть побольше используйте uiRouter. Ну или на худой конец angular-router. ngRoute подходит для очень маленьких приложений. Учитывайте это.
    Ответ написан
    Комментировать
  • Совмещение angular, yii2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Laravel бери и не мудри. Если нет нормального опыта работы с javascript (jquery не считается) - лучше не брать angular. Лучше погоди чутка пока не релизнится ng2, по ng1 слишком много булшита написано, достаточно вопросы на тостере глянуть.

    Но по вопросу "совмещение" - учить надо по отдельности, да и работать это все независимо друг от друга. Ангуляры отдельно, бэкэнды отдельно, между ними rest api. Ну то есть бэкэнды ничего не знают о том на чем написан клиент и наоборот.
    Ответ написан