Ответы пользователя по тегу Angular
  • Как бороться с неработоспособность angularJS в Rails?

    benbor
    @benbor
    Помог ответ - не забудь лайкнуть
    Серьезно, какое отношение браузерный фреймворк имеет к серверному? Ваш вопрос сравни "как бороться с неработоспособностью angularjs, когда на улице дождь". Откройте консоль в браузере и смотрите ошибки
    Ответ написан
  • Как получить this контроллера из директивы?

    benbor
    @benbor
    Помог ответ - не забудь лайкнуть
    Смотрите, как полезно читать офф документацию
    https://docs.angularjs.org/guide/directive#creatin...
    Прямо Ваш код!
    Ответ написан
  • Как реализовать парсинг бесконечной прокрутки (AngularJS)?

    benbor
    @benbor
    Помог ответ - не забудь лайкнуть
    А как вы пытались определить?
    Вот, открыл "сеть" - все видно - матаеш в низ, запросы посылаются
    gyazo.com/b998f91b16936fab9fa725806c5ddfcc
    Ответ написан
    Комментировать
  • Angular. Как узнать, когда содержимое переменной закончило отрисовку в DOM?

    benbor
    @benbor
    Помог ответ - не забудь лайкнуть
    Ну вообще, у вас неправильный подход . Вы пытаетесь писать в стиле JQuery. Вешаете watch на высоту вашего блока, и как только она меняется, двигаете страницу. Так как $watch отрабатывает при объявлении тоже, то первый раз у вас вызовется что-то типа "сделай скрол на 0px", но когда контент заполнится, $watch выполнится снова "сделай скрол на 200px". Вот похожая задача
    stackoverflow.com/questions/19048985/angularjs-bet...
    Ответ написан
  • Angular - promise в цикле, и как получить данные при каждой итерации?

    benbor
    @benbor
    Помог ответ - не забудь лайкнуть
    1 вариант передать коллбек в Сервис, который будет обрабатывать новые данные, и вызвать сервис не из resolve а из контроллера:
    function getProfiles(callback) {
      var promises = _.range(pages).map(function(page) {
        $http
          .get('http://api/v1/profiles?page=' + page)
          .success(function(response) {
            callback(response.data);
           });
      });
    };
    app.myController(function($scope, myService){
        $scope.profiles; // это отобразить в ng-repeat на вьюхе
        myService.getProfiles(function(newProfiles){
            $scope.profiles += newProfiles;
        });
    });

    Но, не совсем понятно, раз у Вас много профилей, и у Апи готов Пейджинг, зачем грузить все сразу?
    Вариант 2.
    function getProfiles(page) {
      return  $http
          .get('http://api/v1/profiles?page=' + page)
          .success(function(response) {
                  return response.data;
           });
      });
    };
    app.myController(function($scope, myService){
        var page = 1;
        $scope.profiles; // это отобразить в ng-repeat на вьюхе
        //здесь прикрутить какой нибудь scroll watcher
        $scrollWatcher.onNewScroll(function(){
              myService.getProfiles(page++).success(function(newProfiles){
                   $scope.profiles += newProfiles;
              });
        })
    });

    PS непомню точно, но какой-то в ангулар есть сервис, отвечающий за прокрутку экрана, scrollWatcher взял из головы, погуглите
    Ответ написан
  • AngularJS + $httpProvider + CORS - что не так?

    benbor
    @benbor
    Помог ответ - не забудь лайкнуть
    Смотрите, Гугл разрешает делать запросы с любых сайтов, возвращая заголовок в ответе Access-Control-Allow-Origin: *. А ваша авторизация работает только благодаря TokenIntercepter именно он подставляет токен авторизации для всех ваших запросов. Я проверил, гугл работает нормально, если ему подсовывать лишний Authorization заголовок, значит дело точно не в request Intersepter
    request: function (config) {
                config.headers = config.headers || {};
                if ($window.sessionStorage.token) {
                    config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
                }
                return config;
            },

    Intersepter в переводе обозначает "перехвадчик" он перехватывает не только посылку запроса(request), но и ответ (response) и ошибки.
    Поставьте брекпоинт в каждую функцию в интерсептере, и посмотрите, как он реагирует на запрос в гугл.
    Скорее всего дело в Response функции
    Ответ написан
    Комментировать
  • Как сделать код рабочим для promise Angular?

    benbor
    @benbor
    Помог ответ - не забудь лайкнуть
    $scope.getLen = function() {
            $scope.insurances.query().then(function(data) {
                     $scope.length = data.length
           });
    }

    Insurances это сервис, а не готовая коллекция (массив). У него есть только те методы, что вы передали (query, get, save ..... ) Выше изложен псевдокод, точно не помню, быть может в data будет HttpResponse а не готовый масив
    Ответ написан
    Комментировать
  • Как применить плагин jQuery на angularjs?

    benbor
    @benbor
    Помог ответ - не забудь лайкнуть
    1. Использовать jquery и angular не есть лучшая идея, у них абсолютно разные идеологии. Но если "Вам надо и все тут", то
    2. Про события, которые произошли "вне ангулар мира" ангулар ничего не знает. Ваш
    el.iba_model('init', {id: scope.config.templateId});
    явно что-то добовляет в DOM и чтобы ангулар об этом узнал Вам нужно в этот момент вызвать $digest ( или более безопасную функцию $apply)
    Вот пример не моего jsfiddle jsfiddle.net/tnq86/15
    После того, как элементы изменились в DOM из коллбека jquery вызывается $scope.$digest()
    Ответ написан
  • Как из полученного словаря(json) получить данные?

    benbor
    @benbor
    Помог ответ - не забудь лайкнуть
    Да там не так уж и много учить, json очень прост.
    $scope.results['results'] // здесь лежит не один элемент, а весь массив
    $scope.results['results'][0] // здесь лежит первый по порядку элемент
    $scope.results['results'][1] // здесь лежит второй по порядку элемент

    если нужно найти элемент по id то придется идти по всему массиву и искать с нужным id

    UPD: jsfiddle.net/m27ow8rz/22
    $resource очень гемороен, хотите для него разбирайтесь сами, query точно подразумевает, что вам вернется масив, а не объект. Плюс, $resource это promise его нужно юзать через сallback, к тому моменту когда вы пытаетесь
    $scope.videos = $scope.results['results']; //$scope.results.item пробовал
    запрос еще не выполнен. Я сделал с $http (для симуляции запроса использовал doc.jsfiddle.net/use/echo.html) Переделайте под свой сами
    Ответ написан
    3 комментария
  • Как сделать вкладку активной, если разные маршруты?

    benbor
    @benbor
    Помог ответ - не забудь лайкнуть
    a)Можно было бы создать сервис, например "tabStatus" и дерективу "enableTab", которая через DI зависит от этого сервиса. В первой строчке нужных Вам контроллеров (я так понимаю "Catalog" and "Service-Detail") вызвать tabStatus.activeCatalogTab(). Директиву повесить на нужный таб, и в link функции добовлять class active к Нужному табу.
    b) Можно поступить более костыльно, просто в Ваших контроллерах вызывать jquery селектор и говнячить на прямую
    с) Ваш роут провайдер уже считается устаревшим, вместо его юзайте ui-view. В нем усть вложенные view тогда, если сделать service-detail подвью от catalog то ваша проблема будет решаться более эллегантно чем a,b варианты ( оч не рекомендую a,b)
    Ответ написан
  • Как изменить свойство у объекта angular на основе позици пункта в списке?

    benbor
    @benbor
    Помог ответ - не забудь лайкнуть
    Для начала, архитектура jquery и angular очень сильно различается, и ангулар хорошо тем, что избавляет нас от jquery. (только селекторы jqlite - это все, что нам нужно в angular приложении)
    Поэтому - мой Вам совет, не используйте jqury sortable - используйте ..... google
    За 5 минут нашел это, Вроде демо есть, примеры тоже. Есть коллбэк orderChanged там и меняйте значение. Уверен, что Вы можете потратить немного больше времени на google и найдете оптимальное готовое решение для вашего случая
    Ответ написан
  • Kак загрузить контроллер раньше директиви ?

    benbor
    @benbor
    Помог ответ - не забудь лайкнуть
    1. Пользуйтесь тегами CODE. Так гораздо проще читать исходный код... удивительно
    2. Не совсем понятно, результат AJAX вы кладете в $scope, а хотите увидеть в DOM
    (function () {
      var app = angular.module('app',["all-directive"]);
    
      app.controller('pustTextCtrl', function($scope, $http){
        $http.get("json/data.json").success(function(data){
          $scope.data = data;
        });
      });
    }();
    
    (function () {
      var app = angular.module('all-directive',[]);
    
      app.directive('anyDirective', function(){
        return {
          restrict: 'A',
          link: function($scope, elem, iAttrs, controller) {
            //alert(elem.children());[] // пустой массив /а нужны данные
            $scope.$watch('data', function(newData){
               if(newData) {  // первый раз watch вызовется когда ajax данные еще не придут
                  alert(newData); // пользуйтесь
               }
            });
          }
        };
      });
    })();
    Ответ написан