Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.08.2015, 20:49
Аватар для afanasev
Новичок на форуме
Отправить личное сообщение для afanasev Посмотреть профиль Найти все сообщения от afanasev
 
Регистрация: 13.11.2012
Сообщений: 3

$resource custom action query
Не могу понять, почему не удается сформировать строку вида
http://myrest/v1/users?page=5

из приеденных ниже ресурсов правильную строку дает только good

app.constant('userUrl', 'http://myrest/v1/users/');
app.constant('userUrlPagination', 'http://myrest/v1/users');
app.factory('Users', ['$http', '$rootScope', '$resource', '$location', 'toaster','userUrl','userUrlPagination',
    function ($http, $rootScope, $resource, $location, toaster, userUrl,userUrlPagination) {

        var bad = $resource(userUrl + ":id", {id: '@id', page: 5});
        var good = $resource(userUrlPagination + "?page=:page",  {page: 5});


Хотя в мануале https://code.angularjs.org/1.3.18/do...vice/$resource
черным по белому написано, что вот это должно работать.
...Given a template /path/:verb and parameter {verb:'greet', salutation:'Hello'} results in URL /path/greet?salutation=Hello ...

Последний раз редактировалось afanasev, 24.08.2015 в 23:20. Причина: Утчонение темы
Ответить с цитированием
  #2 (permalink)  
Старый 24.08.2015, 07:57
Аватар для afanasev
Новичок на форуме
Отправить личное сообщение для afanasev Посмотреть профиль Найти все сообщения от afanasev
 
Регистрация: 13.11.2012
Сообщений: 3

В общем помогите настроить единый $resource, чтобы он формировал и такую строку .../users/32 и такую .../users?page=1. Что то я разобраться не могу, приходится откатываться на сервис $http
Ответить с цитированием
  #3 (permalink)  
Старый 24.08.2015, 23:02
Аватар для afanasev
Новичок на форуме
Отправить личное сообщение для afanasev Посмотреть профиль Найти все сообщения от afanasev
 
Регистрация: 13.11.2012
Сообщений: 3

Не дожидаясь ответа, рад сообщить. Я догадался. Видимо сильно кое где зудило... и так:

1. Возможно я направил свои и ваши мысли в неверно русло и не совсем корректно изложил задачу.
2. Оказывается $resource на то и ресурс, он же источник, единый и есть на самом деле. И у него есть действия action в которых можно настроить url и параметры! Вот оно!

И выглядит это так:

app.constant('baseUrl', 'http://myrest/v1/users');
app.factory('Users', ['$http', '$rootScope', '$resource', '$location', 'toaster', 'baseUrl',
    function ($http, $rootScope, $resource, $location, toaster, baseUrl) {

      var itemsResource = $resource(baseUrl + "/" + ":id", {id: '@id'}, {
            // тот самый custom action
            paginationQuery: { 
                method: 'GET',
                params: {pp: 3, p: 1},
                url: baseUrl + "?page=:p&per-page=:pp",
                isArray: true
            }
        });

        var currentItem = {};

        var items = [];


        function getItems() {

            var promise = itemsResource.paginationQuery().$promise;

            promise.then(fulfilled, rejected)

            function fulfilled(data) {
                items = data;
                $rootScope.$broadcast('items:updated');
            }

            function rejected(data) {
                console.log(data);
            }
        }
}


В итоге код работает как надо. Источник один общий. Действия delete save и тд работают стандартно.

Однако есть просьба. Помогите код сделать по-красивее, а то местами выглядит не очень. Я еще только учусь.

Последний раз редактировалось afanasev, 24.08.2015 в 23:38.
Ответить с цитированием
  #4 (permalink)  
Старый 27.08.2015, 09:26
Новичок на форуме
Отправить личное сообщение для dunmaksim Посмотреть профиль Найти все сообщения от dunmaksim
 
Регистрация: 30.08.2013
Сообщений: 2

Будьте осторожны, созданный с помощью фабрики объект будет заменять свои данные при вызове методов. Если Вы думаете, что получится сделать так:

var item = ItemResource.get({id: 2});


а потом

item_comments = item.getComments();


будьте готовы к тому, что исходный объект item будет заменён на результат вызова метода getComments. Лучше сделайте отдельные ресурсы под каждую сущность.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как настроить $resource для разных типов серверов Shitbox2 Angular.js 8 12.11.2013 00:06
Все проблемы с $resource Shitbox2 Angular.js 3 15.07.2013 21:53
Download файлов greatilya Серверные языки и технологии 21 03.02.2012 22:30