Ответы пользователя по тегу Angular
  • Почему использование $parse не рекомендуется в angularjs?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Использование $parse внутри link директивы это нормальная практика, но надо понимать зачем вы это делаете.

    В вашем примере достаточно parse заменить на биндинг проперти в скоупе. Единственная причина по которой тут используется $parse - микрооптимизация для уменьшения количества ватчеров.

    updated

    Поправка, единственная причина почему тут используется $parse вместо изолированного скоупа - то что у ngModel уже есть изолированный скоуп и ангуляр банально не даст создаться двум директивам с изолированными скоупами на одном элементе.
    Ответ написан
    3 комментария
  • Существует ли индексируемый поисковиками аналог AngularJS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    стабильное решение уже указал вам Никита Гущин, будущее - Александр Марченко

    И чтобы его можно было использовать с laravel5.


    Все что угодно, SPA ничего не знают о Laravel. Всей ересью вроде проксирования поисковиков будет заниматься nginx или мидлвэр перед laravel.
    Ответ написан
  • Что такое "отказ от двустороннего датабиндинга"?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    есть датабиндинг, observable отношение между одним компонентом и другим. Например:

    var model = {
        title: 'Some Title'
    };
    
    function view(container) {
        var el = container.querySelector('[data-bind="title"]');
        // следим за изменениями
        Object.observe(model, (changes) => {
            if ('title' === changes.name) {
                // обновляем при изменении связанное значение у другого компонента
                el.innerHtml = model.title;
            }
        }, ['update'])
    }


    В этом случае если каким-то чудом наш элемент вдруг поменяет содержимое (ну а вдруг?) то значение внутри модели не поменяется, оно не зависит от другого компонента.

    В случае же с двусторонним датабиндингом изменения происходят с двух сторон. Грубо говоря с двух сторон стоят обзерверы которые меняют значения. И это говорит нам о том что изменения, поток данных, идут в обе стороны, потому этот вид биндингов называется двусторонним.

    Сами по себе биндинги это круто, и это то что делает современные фреймворки такими крутыми - позволяют реагировать на изменение данных и обновлять к примеру view приложения, без необходимости писать огромные куски кода отслеживающие изменения - все за нас делает фреймворк.

    Проблема с двусторонним дата биндингом очень простая - систему построенную с активным применением двустороннего биндинга крайне тежело отлаживать. Приведу простой пример. Предположим что у нас есть компонент A и компонент B. У компонента A есть свойство foo которое содержит какую-то строку, компонент B содержит свойство bar и у нас установлено двустороннее связывание между этими двумя свойствами.

    Фреймворк гарантирует нам то, что если одно из этих полей поменяется, он поменяет другое, так что A.foo всегда будет равно B.bar. Вот только это создает такую проблему, теперь оба компонента должны учитывать что значение foo и bar могут поменяться в любой момент, и не понятно кто инициировал изменения. Спокойно можно войти в состояние когда A меняет состояние, B синхронизируется и реагирует и снова меняет состояние, тогда реагирует A, и может быть появляется какие-то другие связанные компоненты. То есть мы можем быстро и просто схватить рекурсию. Если у вас на этой основе построена бизнес логика - то вам будет крайне сложно потом поддерживать эту систему, дебажить ее ад.

    Грубо говоря помимо того что дебажить эту систему становится тяжело, у нас появляется неявная зависимость между A и B, им нужно знать что они могут поменять друг дружку. А все неявное это не очень хорошо.

    Что можно сделать, можно разложить двустороннюю связь на составляющие. Односторонний биндинг из A в B и навесить ивенты если один из компонентов что-то меняет. В этом случае вы всегда можете поставить бряку и точно будете знать кто что поменял. Поддерживать такую систему куда проще.
    Ответ написан
    7 комментариев
  • Как совместить Laravel и Angular?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ответ - не пихать ангуляровские темплейты в blade, если вам надо каким-то образом передавать данные - то самый простой способ делать это так:

    angular.module('app.prefetchedData', []).constant('prefetchedData', {
        // some serialized data from laravel
    });


    все остальное - вынести в отдельные файлики или бандлить штуками типа webpack.

    Еще относительно правильный способ - экранирование (в blade же есть raw или что-то подобное как в twig?)

    Ну и третий вариант, сродни кастылю и вам должно быть слегка стыдно за его использование - в $compileProvider есть возможность установить как именно обозначается биндинг значений в angular.
    Ответ написан
    Комментировать
  • Как определиться с фреймворком?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Нужна помощь с выбором дальнейшего пути развития в веб разработке.

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

    Мне не понятно, это разделение фреймворков на группы

    разделение по языку программирования и задачах, которые решает этот фреймворк. Допустим RoR, Sails, Laravel, Symfony, Drango - это фреймворки для организации WEB интерфейса к вашему приложению. И не более.

    Angular, Ember, React, etc - это фреймворки для организации интерактивных WEB приложений на клиенте, на сервере им делать нечего (если не учитывать server-side рендринг для укорения отображения страницы).

    Используют ли их вместе, или только один?

    если вам надо написать интерактивное приложение и API к нему, то логично взять два фреймворка, которые реализуют то что нужно. Так что да.

    Как большое море, в котором видны островки, но целой карты нету

    нарисуйте. В центре ставим WEB, от него ответвляем клиент и сервер, и соединяем все... википедия в этом нам может помочь.
    Ответ написан
  • Какой js-фреймворк больше всего подходит для использования вместе с Ruby on Rails?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Все что угодно, если мы говорим о SPA.... ну и все что угодно если мы говорим не о SPA.
    Ответ написан
    2 комментария
  • Какие преимущества использования Webpack + Gulp?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    webpack бандлер и больше ничего не должен уметь делать. То что там есть плагины которые позволяют запускать таски это прикольно, но все же нет.

    Лично у меня gulp используется для оркестрации всем что у меня используется, запуск тестов, подготовка билда (упаковка и т.д.) ну и т.д. Часть тасков не связана с бандлингом и потому пихать это в webpack что-то не особо хочется.
    Ответ написан
  • Как заставить работать ng-repeat внутри ng-view?

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

    Ну и да... традиционно повторюсь - не используйте $scope в контроллере, используйте controllerAs. Не используйте отдельные контроллеры, только в контексте директив. И тогд будет вам маленькое счастье и меньше боли.
    Ответ написан
    5 комментариев
  • Структура папок generator-gulp-angular?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Что из этого можно удалить чтобы не нарушить работу сдобщика

    разберитесь, скорее всего достаточно удалить модули из index.modules.js

    куда ложить свои html, css, js

    а вот как на вашей картинке, разбивая по компонентам. Для каждого компонента свой html, свои js-ки (обычно две - модуль и директива, некоторые и контроллер директивы выносят)...

    Словом...

    https://www.airpair.com/angularjs/posts/component-...
    https://github.com/johnpapa/angular-styleguide
    Ответ написан
    Комментировать
  • Angular.js нужно учить со второй версии или начать с первой?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Angular 1.5 задумывался авторами как переходная точка, что бы проще мигрировать людей с первого на второй. Так что учите angular 1.x и соблюдайте стайл гайд. Ну и почитайте про MVC, про компонентный подход к разработке на Angularjs. (отказ от двустороннего датабиндинга, данные должны идти только в одном направлении, упор на классическую схему MVC).
    Ответ написан
    Комментировать
  • Как работать с контроллером в директиве?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вам не нужен тут link. Единственное что вам тут нужно - указать изолированный скоуп что бы нбыло конфликтов с другими директивами.

    return {
                template: '<div ng-repeat="item in items">{{item.name}}</div>',
                restrict: 'EA',
                controller: AddToCartController,
                conrollerAs: 'addto',
                scope: {}
            };


    link нужен только в случае, если у вас для коректной работы директивы
    - есть необходимость поработать с DOM, например ивенты понавешивать или еще чего
    - есть необходимость следить за изменением данных в атрибутах (attr.$observe и scope.$watch только в link), что бы дернуть метод контроллера
    Ответ написан
  • Как ускорить мобильное приложение, написанное на HTML5/AngularJS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Если я запакую его в APK, будет ли оно быстрее работать?

    нет. Для андроида можно попробовать взять crosswalk, тогда какой-то прирост будет + вы устраните различия в поведении вашего приложения на различных платформах.

    с использованием mobileangularui для интерфейса.

    взяли бы ionic, там хоть как-то UI под мобильники оптимизируется с точки зрения производиетльности.

    Проходит примерно 0.5-1 секунда перед тем как любая кнопка отреагирует

    а тут сильно зависит от того что вы там наплодили внутри ангуляра.

    В целом если вам нужна производительность - лучше взять react-native и не париться. Благо скоро выйдет angular2, который со слов разработчиков будет иметь интеграцию с react-native.
    Ответ написан
    Комментировать
  • Почему поведение angularjs тега отличается от обычного тега?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    по умолчанию все кастомные элементы являются инлайн элементами, если что.
    Ответ написан
    Комментировать
  • Какой js-фреймворк стоит изучать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Сейчас стою на пороге новых открытий

    открой для себя поиск по сайту или гугл, тема обсасывается по 10 раз на неделе.

    В целом в долгосрочной перспективе - Angular2, в краткосрочной - React + Flux. Только у этих двух есть какая-то четковыраженная и довольно правильная философия. Если вы разберетесь с этим делом - то пересесть на другие игрушки будет не проблема в случае чего.
    Ответ написан
    5 комментариев
  • Есть ли видео, в котором в режиме реального времени пишут админку на angular?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    учитесь декомпозиции задач.
    Ответ написан
    Комментировать
  • Как избавиться от ошибки SyntaxError: Unexpected token v?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    смотреть что приходит с сервера, судя по всему эта ошибка парсинга JSON, ибо по коду вроде бы все норм (за исключением использования скоупа, вызова $http из конструктора...)
    Ответ написан
  • Как создать admin панел на Angular js. Что для этого нужно?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    но не где не могу найти информации по этому.


    Напишите список того что должно быть в вашей админке. Делайте по списку.
    Ответ написан
    2 комментария
  • Как заставить директивы общаться друг с другом?

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

    Общение директив имеет место быть если одна вложена в другую или у них есть реальная необходимость общаться. В вашем случае одна директива просит сервис пометит что-то прочитанным, а другая просто мониторит количество не прочитанных и среагирует на изменение.
    Ответ написан
    3 комментария
  • Как справляется Google с индексацией сайтов на AngularJS и других фреймворках?

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

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

    Ну и еще вариант - тупо пропиать на уровне вэб сервера - если зашел бот - отдать ему снапшет.

    для генерации снапшетов можно либо поднять у себя phantom.js либо воспользоваться сервисами типа https://prerender.io/
    Ответ написан
    Комментировать