• Не появляется отображается в директиве информация, что делать?

    @bromzh
    Drugs-driven development
    Прежде чем что-то писать дальше на ангуляре, советую изучить styleguide и следовать ему.
    Особенно плохи такие вещи:
    1) использование .success/.error вместо .then в $http; Они давненько deprecated. Только .then.
    2) создание лишних deferred-объектов. метод .then() и так вернёт промис.
    3) в методе .getOrders твоего сервиса в одном случае возвращается промис, а в другом просто null. всегда возвращай промис. просто там, где всё плохо нужно делать reject
    4) сохранять список в сервисе, а потом искать элемент по id в нём не самая хорошая идея. нужно всегда запрашивать с сервера свежие данные
    В общем, твой сервис должен выглядеть примерно так:
    ordersFactory.$inject = ['$http', '$q', 'AuthService'];
    function ordersFactory($http, $q, AuthService) {
        return {
            getList: getList,
            
        };
    
        function getList() {
            // лучше, чтобы был промис
            // Выстраиваем цепочку промисов
            return AuthService.isAuthorized()  
                .then(() => $http.get('/api/orders'))  // тут шлём запрос, 
                .then(response => response.data);     // bи просто возвращаем данные ответа
                // в итоге, сервис зарезолвит промис и вернёт данные 
                // только если все в цепочке промисов зарезолвят их
                // если где-то будет reject, то его можно будет отловить выше
                // либо можно отловить reject тут и что-то сделать, тут уж тебе решать
        }
    
        function getById(id) {
            AuthService.isAuthorized()  // лучше делать запрос на сервер, чем пытаться найти в массиве
                .then(() => { $http.get('/api/orders/' + id))                  
                .then(response => response.data);
        }
    
        function getByIdInList(id) { // но если сильно хочется искать элемент на клиенте
            return getList()         // то лучше сделать так
                .then(orders => { // обрабатываем данные, полученные из getList 
                                          // при условии, что они зарезолвятся
                    // тут ищем
                    for (let i = 0; i < orders.length; ++i) {
                        if (orders[i].id === id) {
                            return $q.resolve(orders[i]);
                        }
                    }
                    return $q.reject();
                });
            
        }
    }

    Ну и если ты не работаешь с DOM, функция линк не нужна, контроллера директиве хватит.

    Ну а ответ на твой вопрос кроется тут:
    vm.setOrder = (id) -> 
        vm.order = OrderService.getOrderId(vm.index)


    Получения списка заказов - асинхронная функция, завёрнутая в промис. После выполнения в сервисе у тебя будет список заказов. Но функция getOrderId - синхронная и работает без промисов.
    Это неправильно. Если хоть она функция в цепочке вызовов асинхронная и возвращает промис, то нужно выстроить цепочку промисов, и в контроллере в .then уже присваивать полученные данные.

    В итоге, при загрузке страницы у тебя просто может не быть списка заказов.

    Если взять мой сервис, то в контроллере надо так:
    OrderController.$inject = ['OrderService'];
    function OrderController(OrderService) {
        var vm = this;
    
        OrderService.getOrderId(vm.index)
            .then((order) => {
                vm.order = order;
            })
            .catch(() => {
                vm.message = 'Заказ не найден';
            });
    }
    Ответ написан
    Комментировать
  • Почему сразу не срабатывает radiobutton?

    alsopub
    @alsopub
    Во-первых у вас перепутаны Male и Female, во-вторых у вас через setSex(value) не передается значение, а this.sex выводит не то что передается функции, а то что public sex:String. Могу предложить заменть setSex(value) на setSex('Female') и sexSex('Male') соответственно и заменить this.sex на sex. Другими словами - plnkr.co/edit/6V40MXjN4vzCPnZKl26S?p=preview
    Ответ написан
    1 комментарий
  • Что не так при сохранении?

    @lega
    Выведите в консоль какая ошибка выходит.

    post('/products/add' соответственно post('/add'
    Почему оно соответственно? Урлы же разные.
    Ответ написан
    1 комментарий
  • Как в mongoose найти данные по неполному совпадению?

    as_for_me
    @as_for_me Автор вопроса
    Нашел решение:
    person.find(
    {
    "name.nameToDisplay": new RegExp(req.body.name, 'i')
    }, function(err,data){
    res.json(data);
    });
    Ответ написан
    Комментировать
  • Как добавлять массив объектов в ng-model из директивы?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    тут не нужен ngModel. Но если хотите - читайте документацию о ngModelController, там есть все что нужно. В целом если не придираться к тому что используется $scope, Александр Аксентьев правильно вам подсказывает.
    Ответ написан
    2 комментария
  • Как работает Javascript?

    mudrenokanton
    @mudrenokanton
    frontend dev
    попробуйте передать в функцию этот vm.cartItems, возможно в момент исполнения функции этот объект считывается со scope, где он пуст

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

    aleksand44
    @aleksand44
    могу ошибаться, но тут по-моему надо использовать перебор свойств объекта с помощью for in
    Ни алерт ни консоль.лог не показывают содержимое объекта прост овызвав переменную, которая его содержит
    Ответ написан
    1 комментарий
  • Как сравнить объекты в массиве?

    miraage
    @miraage
    Старый прогер
    Разумеется, он хочет найти по референсу.
    Если бы Вы использовали lodash, было бы весьма просто сделать так:
    if (!~_.findIndex(vm.cartItems, objItems)) {
      vm.cartItems.push(objItems);
    }

    Либо самому в цикле проходить.

    // EDIT

    DEMO

    var cartItems = [
      {id: 1, name: 'foo'},
      {id: 2, name: 'bar'}
    ];
    
    var itemExists = {
      id: 1,
      name: 'foo'
    };
    
    var itemNew = {
      id: 3,
      name: 'baz'
    };
    
    function hasItem(collection, needle) {
      for (var i = 0, ii = collection.length; i < ii; ++i) {
        var item = collection[i];
        var keys = Object.keys(needle),
            matched = 0;
        
        keys.forEach(function (key) {
          if (item[key] == needle[key]) {
            ++matched;
          }
        });
        
        if (matched === keys.length) {
          return true;
        }
      }
      
      return false;
    }
    
    console.log(hasItem(cartItems, itemExists));
    console.log(hasItem(cartItems, itemNew));
    Ответ написан
    5 комментариев
  • Кто заказывает маркетинговые исследования?

    @Edwin
    Добрый день!
    А как Вы относитесь к тому, чтобы для себя провести маркетинговое исследование с целью определения своей ЦА?
    Ответ написан
    Комментировать
  • Куда идти: радиоэлектронщик или веб-программист?

    Будь я на вашем месте с сегодняшим мышлением и идеалами, с радостью пошел бы на радиоэлектронщика. Веб-программирование - не программирование как таковое даже, настоящие программисты, что пишут на c++, просто смеются. Тупиковый путь развития, при том, что программисты становятся инженерами ПО в гуглах и майкрософтах, а уровень абстракции растет.

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

    Чтобы быть веб-программистом будущего, нужно быть кем-то гораздо большим, чем профессионал сегодня. Полагаю, основа - производительность высоконагруженных систем, big data, ux (и психология пользователя), ну и немного привычной верстки, привычного js.
    Ответ написан
    Комментировать