将params传递给控制器​​的角度服务?

时间:2015-06-22 10:06:54

标签: javascript angularjs service controller params

我是一个有角度的新人。我希望将params传递给服务,该服务根据这些参数从服务器获取数据。 例如,如果我想传递一个书名字符串,然后在服务中使用它来连接请求URL。文档没有在此主题中清楚地显示,我在其他资源中找不到有用的示例。

让我们说,这是控制器:

app.controller('BookController', ['$scope', '$routeParams', 'books', function($scope, $routeParams, books) {
  // sending params to books service before a successful return 
  books.success(function(data) {
    $scope.book = data[$routeParams.bookId];
  });

这是服务

app.factory('books', ['$http', function($http) {
    // var url = 'http://...' + ParamFromController + '.json'
    return $http.get(url)
    .success(function(data) {
            return data;
    })
    .error(function(err) {
            return err; 
    });
}]);

那么,我怎样才能将params发送到#book;'服务然后在服务中使用它? 非常感谢。

3 个答案:

答案 0 :(得分:3)

您可以将服务声明为:

app.factory('books', ['$http', function($http) {
    // var url = 'http://...' + ParamFromController + '.json'
    return {
      getVal: function(url,options){
         return $http.get(url,options)
      }
    } 
}]);

并在您的控制器中使用它,并提供适当的参数,以传递到书籍'服务:

app.controller('BookController', ['$scope', '$routeParams', 'books', function($scope, $routeParams, books) {
  // sending params to books service before a successful return 
  books.getVal('api/activity.json',{'name':'abc'}).success(function(data) {
    $scope.book = data[$routeParams.bookId];
  });

另外,请勿在{{1​​}}和.success()中使用service回调。 controller function服务正在返回一个promise(books隐式返回一个promise),你可以在控制器中处理它。

答案 1 :(得分:1)

现在您将$http的承诺/结果作为服务实例返回。 服务并不意味着以这种方式工作。您应该返回一个包含多个定义服务的属性/方法的对象:

app.factory('books', ['$http', function($http) { 
  var instance = {
    getBook: function(bookId) {  
      return $http.get(...);
    }
  }

  return instance;
}

在控制器中,您可以按如下方式使用图书服务:

books
  .getBook($routeParams.bookId)
  .then(function (result) { ... });

答案 2 :(得分:1)

app.factory('books', ['$http', function($http) {

var booksService = {};

booksService.getBook = function(bookId){
{
     return $http.get(url, bookId);
};

return booksService;
}]);

并在您的控制器中

app.controller('BookController', ['$scope', '$routeParams', 'books', function($scope, $routeParams, books) {
 books.getBook($routeParams.bookId).success(function(data) {
    $scope.book = data;
  });