Ответы пользователя по тегу Angular
  • Пример с нотификацией на node.js + angular.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    нотификации это как чат н только без возможности ответить.

    socket-io и вперед.
    Ответ написан
    Комментировать
  • Как праивльно записать такое условие (angular2)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    рекомендую добавить путь к иконке на уровне источника данных, ну или в контроллере. Это дело тогда можно легко покрыть тестами, без необходимости инстанцировать UI элемент.
    Ответ написан
    Комментировать
  • Можно ли совместить глобальные и commonJS-модули?

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


    Используйте сразу es2015 модули может?

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

    p.s. я бы рекомендовал все же webpack вместо browserify, сейчас в последнем смысла особо нет.
    Ответ написан
    2 комментария
  • Почему происходит двойное присвоение внешней переменной в директиве Angular?

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

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

    Лично я для упрощения пробрасываю внутрь кусочек объекта, и просто никогда не меняю его в компоненте, а прошу это сделать сервисы. Тогда те смогут пробросить состояние по кругу.
    Ответ написан
  • Как избавиться от контроллеров?

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

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

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) не используйте $scope в контроллере. Y031. И тем более не используйте $rootScope. И тем более не используйте и то и то.

    2) если мы выполним предыдущий пункт, у нас станет на 2 зависимости контроллера меньше, и проверять нам надо только состояние контроллера. В этом случае для теста достаточно просто взять нашу функцию и подменить зависимости через моки (если используете jasmine то там уже все есть, если используете mocha то тогда рекомендую sinon)

    3) Продвинутое владение: Не используйте ngController или контроллеры стэйтов/роутов (максимум для прокидывания данных из ресолверов в скоуп). Дробить все на директивы. Причем данные прокидывайте в них сверху через биндинги а не запрашивайте прямо изнутри через сервисы. Тогда тестировать в нашем UI компоненте вообще ничего не надо будет. Достаточно биндинги проверить. А модель уже покрывать обычными тестами, ну и модель наша будет полностью отделена от angular-а (сервисы типа $http и контейнер зависимостей не в счет).

    p.s. примерчик простенького приложения где все три пункта есть: вот.
    Ответ написан
    4 комментария
  • Как использовать как фильтр для ng-repeat в AngularJs?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    не используйте фильтры с ngRepeat. Вот и вся наука.

    По изменению сегодняшней даты (например при помощи ngChange или других колбэков вашей диреткивы датапикера) просто вызываем метод контроллера который будет формировать новую коллекцию. И все.

    p.s. никаких $scope.$watch! и вообще не используйте $scope нигде кроме как в link директивы, который вам так же редко когда должен быть нужен. Y031
    Ответ написан
    2 комментария
  • Как сложить введенные числа?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    просто считайте сумму в контроллере, ничего такого.

    this.total = this.sums.reduce((sum, i) => sum + i, 0);


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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    мокаем сервис $location, и трекаем что наш код вызовет метод path с нужными нам аргументами. Создаем инстанс директивы (сервисом $compile) и кликаем на элемент. Проверяем был ли вызван метод.

    Но этот тест можно существенно упростить. У нас уже есть покрытая тестами директива ngClick, потому можно сделать так:

    function HomeButtonController($location) {
             var vm = this;
         vm.goHome = function () {
              $location.path('/');
         }
    }
    
    function homeButtonDirective() {
        restrict: 'E',
        controller: HomeButtonController,
        controllerAs: 'vm',
        transclude: true,
        template: '<button ng-click="vm.goHome()" ng-transclude></button>'
    }


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

    https://github.com/AngularClass/NG6-todomvc-starter/ - примерчик.
    Ответ написан
    7 комментариев
  • Как загрузить сервис по требованию?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    делайте stateless директивы и жизнь будет чуть проще и без этих извращений. Директиве нужны данные? Прокидывайте их снаруж через атрибуты. Введите себе такое простое правило, что директивы не получают состояние сами через сервисы. А сервисы должны использоваться директивой только для того что бы обновить состояние данных во вне, но сами опять же ничего не меняют.
    Ответ написан
    3 комментария
  • Как прицепить Laravel 5.2 к Angular2.0?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    про laravel+angular2


    Потому что эти два фреймворка для двух независимых приложений, между ними HTTP API и все. То есть потом можно сервак быстренько на go переписать а клиент и не заметит.
    Ответ написан
    5 комментариев
  • Модель взаимодействия с сервером?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Почитайте про Event Sourcing и Redux. Эти подходы подразумевают именно то что вы хотите. И да, с angular все это прекрасно дружит.

    Коротко - по ngClick мы генерим действие, отправляем его на сервак и применяем действие к структурке на клиенте (оптимистичный апдейт). Ну и т.д. периодически синхронизируя все это дело.

    p.s. не используйте $scope, никогда (точнее 10 раз подумайте можно ли без него обойтись).
    Ответ написан
    3 комментария
  • Стоит ли сейчас учить TypeScript?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    но вторая его версия пишется на TypeScrip


    Какая разница на чем его пишут, если вы можете писать на чем захотите.

    Давайте проясним. TypeScript это ES6/ES7-stage1 + информация о типах. То есть если вы знаете ES6/ES7-stage1 то вы автоматически знаете TypeScript (добавится только информация о типах и некоторые нюансы, но в целом они строго следует стандарту).

    То есть вот это валидный TypeScript:
    class Foo {
        bar = 'default property value';
    
        constructor(untypedArg) {
           this.foobar = untypedArg;
        }
    }


    Одновременно с тем что это валидный TypeScript код это так же валидный код с точки зрения ES (с учетом драфтов находящихся в stage1, вроде пропертей для объектов)

    Это не Dart, который является другим языком. Это надстройка над JS и не более, кроме возможности (опциальной) декларации типов - там ничего больше нет. Но зато для больших проектов эта информация позволяет избавиться от кучи багов.
    Ответ написан
  • Существуют ли продакшн приложения на Angular2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Да, есть.


    Through developer preview and alpha we've worked closely with several large projects here at Google including AdWords, GreenTea (Google's internal CRM system), and Google Fiber. In fact, just a few weeks ago we saw Google Fiber launch on their new Angular 2 code base.

    Externally, we've worked closely with several other teams integrating with Angular 2 including Ionic Framework on Ionic 2, Telerik on NativeScript, Rangle.io on Batarangle, and many others.


    angularjs.blogspot.com.by/2015/12/angular-2-beta.html

    Собственно, смысл смотреть есть, особенно если до релиза у вас еще есть хотя бы месяца 3-4. Основная проблема с angular2 - он пока в бэте, документация есть но не полностью дописана, еще есть изменения в API и обсуждения новых плюшек. А главное - инфраструктура подтягиваться будет еще минимум пол года. Хотя основные вещи будут доступны уже скоро.

    Ну и да, если взять Angular 1.5, angular/router и babel (или typescript, что для больших проектов полезно), почитать штуки типа ngUpgrade и т.д. то можно сейчас уже стартовать разработку на angular 1.5 а потом мигрировать на 2.0, если вам нужны будут фичи вроде изоморфности и т.д. А может и того проще React взять какой с готовой инфраструктурой.
    Ответ написан
    Комментировать
  • Стоит ли начинать проект на Angular2 beta?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    не на ag2 а на ng2 раз уж на то пошло.

    В целом смотрите сами. Использование нестабильных штук подразумевает что еще могут быть изменения в API ломающие обратную совместимость. То есть надо будет поглядывать на migration guide при обновлении. Благо я думаю эта ситуация сейчас будет происходить чуть реже чем во времена альфы.

    Все сводится к рискам.
    Ответ написан
  • SPA на и AngularJS и Symfony 2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Мешать логику js c логикой шаблонизатора Twig, Blade и т.д. Или же фронтенд отделить целиком от бекенда, сделав бекенд чисто REST ?


    Да, клиент отдельно, сервер отдельно, между ними HTTP API.

    Если у вас будут проблемы связанные со скоростью бутстраппинга и т.д. то вместо того что бы "смешивать" шаблонизатор и angularjs (это вообще тупо), можно просто при запросе на сервак подготовить данные и вшить их в страницу (пробрасывая все через JS).
    Ответ написан
    2 комментария
  • Как избежать краша браузера при $state.go()?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    out-of-memory уже говорит нам о меморилике.
    Ответ написан
    Комментировать
  • Как сделать put запрос с api в angular?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    var data = $.param({
                    зфкфьі:  ["apple", "potato"] ,
                   
                });


    что это?

    $http.put('http://*****/mongorest/control/get-menu?'+ data)


    ммм... почему у вас данные в query string ложатся а не в тело запроса? Как смысл тогда PUT запрос делать?

    Насколько я помню у монги нормальное REST api.

    Должно быть как-то так:

    $http.put('/some/url', {
        someKey:  ["apple", "potato"] ,
    }).then(function (response) {
        // не пользуйтесь .success/.error
    }, function (reason) {
        // пользуйтесь только промисами.
    });


    то есть никаких извращений и подоброго. И не пользуйтесь $.params. Вообще. Для query string у angular есть отдельный параметр в конфигурации запросов.

    $http.get('/something', {
        params: {
             query: 'param'
        }
    }
    Ответ написан
    3 комментария
  • Как создавать spa приложение на сервере?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    It depends.

    Изоморфность приложений, это весьма абстрактный термин который не подразумевает под собой никакой конкретики.

    На каждое подключение нужно создавать отдельный экземпляр spa приложения для его пререндера?


    Если UI не зависит от пользователя - можно вообще варнишом каким закэшировать это добро.

    Если UI зависит от пользователя - опять же вопрос что нам нужно получить. Тот же реакт можно в рамках одного процесса рендрить совершенно по разному. Как и компоненты второго ангуляра. Но вот то как вы строите свое приложение уже может вносить раздор и т.д.

    Изоморфность это круто но пока она мало у кого есть и люди еще не знают как правильно ее готовить. У каждого получается по разному.
    Ответ написан