2015-06-22 88 views
1

我是一個有角度的紐比。我希望將params傳遞給一個根據這些參數從服務器獲取數據的服務。例如, 如果我想傳遞一個書名字符串,然後在服務中使用它與請求url進行連接。文檔在這個主題中沒有清楚顯示,我在其他資源中找不到有用的示例。將params傳遞給控制器​​的角度服務?

讓我們說,這是控制器:

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到 '圖書' 服務,然後使用它在服務? 非常感謝。

回答

3

你可以聲明你的服務爲:

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

,並在控制器中使用它,並提供相應的PARAMS通到「圖書」服務:

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

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

+0

太好了,謝謝!現在對我來說更加清楚了。 –

+0

不客氣:) – nalinc

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) { ... }); 
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; 
    }); 
相關問題