从控制器向 angular 服务传递参数?
Passing params to an angular service from a controller?
我是 angular 新手。我希望将参数传递给根据这些参数从服务器获取数据的服务。
例如,如果我想传递一个书名字符串,然后在服务中使用它来连接请求 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;
});
}]);
那么,如何将参数发送到 'books' 服务,然后在服务中使用它呢?
非常感谢。
您可以将您的服务声明为:
app.factory('books', ['$http', function($http) {
// var url = 'http://...' + ParamFromController + '.json'
return {
getVal: function(url,options){
return $http.get(url,options)
}
}
}]);
并在您的控制器中使用它并提供适当的参数以传递给 'books' 服务:
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
returns 隐式承诺),您可以在控制器中处理它。
现在您正在return将$http
的承诺/结果作为服务实例。
服务不应该以这种方式工作。您应该 return 一个包含多个定义您的服务的属性/方法的对象:
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;
});
我是 angular 新手。我希望将参数传递给根据这些参数从服务器获取数据的服务。 例如,如果我想传递一个书名字符串,然后在服务中使用它来连接请求 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;
});
}]);
那么,如何将参数发送到 'books' 服务,然后在服务中使用它呢? 非常感谢。
您可以将您的服务声明为:
app.factory('books', ['$http', function($http) {
// var url = 'http://...' + ParamFromController + '.json'
return {
getVal: function(url,options){
return $http.get(url,options)
}
}
}]);
并在您的控制器中使用它并提供适当的参数以传递给 'books' 服务:
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
returns 隐式承诺),您可以在控制器中处理它。
现在您正在return将$http
的承诺/结果作为服务实例。
服务不应该以这种方式工作。您应该 return 一个包含多个定义您的服务的属性/方法的对象:
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;
});