2016-03-24 2 views
1

У меня есть следующие состояния как часть AngularJS приложения:Как я могу изменить структуру запроса AngularJS?

.state('app.stages', { 
     url: '/stages', 
     views: { 
     'menuContent': { 
     templateUrl: 'templates/stages.html', 
     controller: 'StagesCtrl' 
    } 
    } 
}) 

.state('app.stage', { 
url: '/stages/:stageId', 
views: { 
    'menuContent': { 
    templateUrl: 'templates/stage.html', 
    controller: 'StageCtrl' 
    } 
} 

Контроллеры связанные являются:

controller('StagesCtrl', function($scope,$http) { 
$http.get("http://localhost/apistages") 
.then(function(response) { 
    $scope.stages = response.data; 
}); 
}) 

.controller('StageCtrl', function($scope, $http, $stateParams) { 

    $http({ 
    method: 'GET', 
    url: 'http://localhost/apistage/', 
    params: {stageId: $stateParams.stageId} 
}).then(function successCallback(response) { 
    $scope.stage = response.data; 
}, function errorCallback(response) { 

    }); 
}); 

Перечень этапов работает хорошо, но запрос в контроллер стадии пытается получить доступ к http://localhost/apistage/?stageId=43 что приводит к 500 (внутренняя ошибка сервера).

Формат URL, который мне нужно использовать, - http://localhost/apistage/43. Как настроить запрос для получения этого URL-адреса?

ответ

1

Тогда не используйте опции params в запросе $ http GET. Вместо того, чтобы просто использовать простую конкатенацию на URL, делая вызов на обслуживание

$http({ 
    method: 'GET', 
    url: 'http://localhost/apistage/'+$stateParams.stageId //append state parameter in URL itself 
}) 

Для REST API я настоятельно рекомендую вам использовать ngResource($resource) модуль угловых. У этого есть хорошая возможность справляться с вызовами отдыха.

+0

Я пробовал это, но поздно ночью и застрял в PHP некоторое время, когда я использовал. для конкатенации вместо +. Такая простая ошибка. –

0

Нельзя использовать два контроллера. Используйте только один контроллер и используйте $ routeParams для получения параметра url. Здесь теперь вы проверяете, присутствует ли параметр или нет, и, при необходимости, дифференцируйте свою логику. Вы можете использовать следующий код: var stageId = $routeParams.stageId; If(stageId) Do something else Do something different

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

  • Нет связанных вопросов^_^