AngularJS在工厂服务中存储var中的$routeParam



我是Angular的新手,目前正在尝试从url中获取项目的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;
});

我知道我缺少了一些东西,我如何将$routeProvider中的ProjectId存储在变量ProjectId中?

谢谢!

这里缺少一些东西来实现这一点。第一个是在你的"ProjectController"中,你需要注入$routeParams变量,使控制器定义

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

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

var pid = $routeParams.ProjectId

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

ProjectFactory.async(pid)

我还没有测试过,但我想这就是你所缺少的。

您需要将$routParams服务注入您的工厂并访问它,如下所示:

var projectId = $routeParams.ProjectId;

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

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

最新更新