簡體   English   中英

將參數從控制器傳遞到角度服務?

[英]Passing params to an angular service from a controller?

我是個有角的新人。 我希望將參數傳遞給根據這些參數從服務器獲取數據的服務。 例如,如果我要傳遞書名字符串,然后在服務中使用它來與請求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; 
    });
}]);

那么,如何將參數發送到“書籍”服務,然后在服務中使用它? 非常感謝。

您可以將服務聲明為:

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];
  });

另外,不要在servicecontroller function都使用.success()回調。 books服務正在返回一個承諾( $http隱式返回一個承諾),您可以在控制器中處理它。

現在,您將返回$http的Promise /結果作為服務實例。 服務並不意味着這種方式。 您應該返回一個對象,其中包含幾個定義服務的屬性/方法:

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

  return instance;
}

在控制器中,您可以按以下方式使用圖書服務:

books
  .getBook($routeParams.bookId)
  .then(function (result) { ... });
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;
  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM