[英]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];
});
另外,不要在service
和controller 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.