1

Использование маршрутизатора ANGULAR по умолчанию, вы можете решить ресурс AJAX, поставив что-то подобное в маршрутизации:Извлечение параметров маршрута в эксплуатации с угловым-ш-маршрутизатор

.when('/view/:recipeId', { 
    controller: 'ViewCtrl', 
    resolve: { 
     recipe: ["RecipeLoader", function(RecipeLoader) { 
     return RecipeLoader(); 
     }] 
    }, 

И внедрение этой услуги:

services.factory('RecipeLoader', ['Recipe', '$route', '$q', 
    function(Recipe, $route, $q) { 
    return function() { 
    var delay = $q.defer(); 
    Recipe.get({id: $route.current.params.recipeId}, function(recipe) { 
     delay.resolve(recipe); 
    }, function() { 
     delay.reject('Unable to fetch recipe ' + $route.current.params.recipeId); 
    }); 
    return delay.promise; 
    }; 
}]); 

Я работаю над приложением Ионного в настоящее время, и имею следующие услуги:

services.factory('AlbumLoader', ['Album', '$route','$q', function (Album, $state, $q) { 
    return function() { 
    var delay = $q.defer(); 
    Album.get({id: $route.current.params.albumId}, function (album) { 
     delay.resolve(album); 
    }, function() { 
     delay.reject('Unable to fetch album'); 
    }); 
    return delay.promise; 
    } 
}]); 

И следующий маршрут:

.state('app.album', { 
    cache: false, 
    url: "/albums/:albumId", 
    resolve: { 
     album: ['AlbumLoader', function (AlbumLoader) { 
     return AlbumLoader(); 
     }] 
    }, 
    views: { 
     'menuContent': { 
     templateUrl: "templates/album.html", 
     controller: 'AlbumCtrl' 
     } 
    } 
    }) 

Ионные использует angular-ui-router и документацию для нее не совсем понятно, по этому вопросу. Как я могу выбрать параметры маршрута в службе, используя angular-ui-router так же, как это делает Угловой маршрутизатор по умолчанию?

EDIT: Все еще есть проблемы с этим. Используя отладчик Chrome внутри загрузчика, $ state.params является пустым объектом, когда URL-адрес равен #/app/albums/17ef729c-af5b-4724-9c69-9585ab542e99. Это приводит к сообщению об ошибке Error: [$resource:badcfg] Error in resource configuration for action get. Expected response to contain an object but got an array, потому что идентификатор альбома не проходит.

ответ

2

$state действует так же, как $route. Просто измените $route на $state и его не вложены в $state.current.params использования $state.params. Или вы можете придать $stateParams.

services.factory('AlbumLoader', ['Album', '$state', '$q', function(Album, $state, $q) { 

    var delay = $q.defer(); 
    Album.get({ 
    id: $state.params.albumId 
    }, function(album) { 
    delay.resolve(album); 
    }, function() { 
    delay.reject('Unable to fetch album'); 
    }); 
    return delay.promise; 
}]); 

Документация по $stateParams, jsbin играть с ним:

+0

Уверены, что $ state.current.params.albumId существует? Я думаю, что это: $ state.params.albumId – Przemek

+0

Ваше право, я пытаюсь найти документы сейчас на их веб-сайте. – Nix

+0

Все еще есть проблемы с этим - с помощью отладчика Chrome внутри загрузчика '$ state.params' - пустой объект. В результате появляется сообщение об ошибке «Ошибка: [$ resource: badcfg] Ошибка в конфигурации ресурсов для действия' get'. Ожидаемый ответ содержать объект, но получил массив', потому что идентификатор альбома не проходит. –

0

это в вашем штате конфигурации

.state("funnyState", { 
      url: "/xxx/:id", 
       templateUrl: "template.html", 
       controller: "funnyController", 
       resolve: { 
        thingINeed : function($stateParams, funnyService){ 
         return funnyService.getReallyFunnyItem($stateParams.id); 
        } 
       } 
      }) 

И в контроллере это

angular.module("app.controllers").controller("funnyController", ["$state", "thingINeed", funnyController]); 
    function funnyController($state, thingINeed){ 
//thingIneed is resolved promise 
//$state contains the id -> $state.params.id 
} 

По крайней мере, как я это делаю в моем текущем проекте.

Смежные вопросы