AngularJS在工厂服务中存储$ routeParam

时间:2014-10-06 15:15:16

标签: javascript angularjs url routes config

我是Angular的新手,我目前正试图从网址获取项目的ID,并将其作为var传递给服务。

我目前的代码如下:

app.config(
  ['$routeProvider',
    function($routeProvider) {
      ...
      $routeProvider.when('/project/:ProjectId', {
        templateUrl: 'project.html',
        controller: 'ProjectController',
        activePage: 'Portfolio'
      });
      ...
    }
  ])

...

.controller('ProjectController', function($scope, ProjectFactory) {
  $scope.content = ProjectFactory.async();
})

...

.factory('ProjectFactory', function($http) {

  var factoryProject = {
    async: function(page) {
      var projectID = 'XXXXXX';
      var apiKey = 'XXXXXX';
      var url = 'http://behance.net/v2/projects/' + projectId + '?api_key=' + 
                 apiKey + '&callback=JSON_CALLBACK';
      var promise = $http.jsonp(url).error(function(response, status) {
        alert(status);
      }).success(function(response, status) {
        console.log(response.project);
      }).then(function(response, status) {
        return response.data;
      });
      return promise;
    }
  };

  return factoryProject;
});

我知道我错过了什么,我怎么能在$ projectProvider中存储:ProjectId,在变量projectID中?

谢谢!

3 个答案:

答案 0 :(得分:1)

您需要将$ routParams服务注入您的工厂并按如下方式访问它:

var projectId = $routeParams.ProjectId;

答案 1 :(得分:1)

$routeParams对象注入控制器,并使用$ routeParams.ProjectId

此处有更多信息:https://docs.angularjs.org/api/ngRoute/service/ $ route

答案 2 :(得分:1)

这里缺少一些让这个工作的东西。第一个是你的ProjectController',你需要注入$ routeParams变量来制作控制器定义

.controller('ProjectController', function($scope, ProjectFactory, $routeParams) {
    $scope.content = ProjectFactory.async();
})

现在您可以在$ routeParams对象中访问ProjectId

var pid = $routeParams.ProjectId

现在您可以将pid作为参数传递到工厂

ProjectFactory.async(pid)

我还没有对此进行测试,但我认为这一切都是你所遗漏的。