2015-05-20 2 views
1

Я пытаюсь отправить идентификатор через контроллер, используя $ routeParams через завод, но он не работает.Угловой RouteParams отправить ID

Мои $ routeProvider:

.when('/event/:eventId', { 
    templateUrl : 'pages/event_detail.html', 
    controller : 'eventPageCtrl' 
}); 

Моя фабрика:

myApp.factory('eventRepo', ['$http', function($http) { 

    var urlBase = 'php/api.php'; 
    var eventRepo = {}; 

    eventRepo.getEvent = function (id) { 
     return $http.get(urlBase + '?eventID=' + id); 
    }; 

    return eventRepo; 

}]); 

Мой контроллер:

myApp.controller('eventPageCtrl', ['$scope', '$routeParams', 'eventRepo', 
     function ($scope, $routeParams, eventRepo) { 

     $scope.getEvent = function (id) { 
      eventRepo.getEvent($routeParams.eventId) 
      .success(function (data) { 
       $scope.eventsDetail = data; 
      }) 
      .error(function (error) { 
       $scope.status = 'Error retrieving event! ' + error.message; 
      }); 
     }; 

}]); 

При обращении с $ http.get() внутри контроллера, а не с завод работает нормально, поэтому я думаю, что я не передаю свои $ routeParams правильно? Возможно, эта строка вызывает проблему eventRepo.getEvent($routeParams.eventId)?

Это работает в настоящее время, но при попытке использовать $ http.get() вне контроллера:

myApp.controller('eventPageCtrl', function($scope, $http, $routeParams) { 

     $http.get("php/api.php?eventID="+$routeParams.eventId).success(function(data){ 
      $scope.eventsDetail = data; 
      }); 
}); 
+0

Вы пытались console.log '$ routeParams.eventId' в' $ scope.getEvent'? – dfsq

+0

Что на самом деле не работает? Проходит ли это 'undefined'? Что вызывает функцию $ scope.getEvent? –

+0

Ваш api.php получает 'eventID' или' eventId'? – Matho

ответ

0

как об использовании resolve в вашем routeProver и возвращение eventId, а затем инъекционные его в controller .. пример :

$ routeProvider:

.when('/event/:eventId', { 
     templateUrl : 'pages/event_detail.html', 
     controller : 'eventPageCtrl', 
     resolve : { 
        eventId: function($route, $location) { 
         var eventId = $route.current.params.eventId; 
         return eventId; 
    }); 

контроллер:

myApp.controller('eventPageCtrl', ['$scope', 'eventId', 'eventRepo', 
     function ($scope, eventId, eventRepo) { //add it as a dependency 

     $scope.eventId = eventId; //you can check this to see if its being assigned 
     $scope.getEvent = function (eventId) {  //Edit: eventId added here 
      eventRepo.getEvent(eventId)   //Edit: eventId passed 
      .success(function (data) { 
       $scope.eventsDetail = data; 
      }) 
      .error(function (error) { 
       $scope.status = 'Error retrieving event! ' + error.message; 
      }); 
     }; 

}]);