如何在 AngularJs 中将参数从控制器传递到服务
How to pass param from controller to service in AngularJs
我目前正在做一个项目来帮助我更好地理解 angularjs!我目前停留在如何将参数从控制器传递给服务。
在我的程序中,当用户在输入中单击按钮时,我创建了一个名为 "GetForecastByLocation" 的函数。我想从那里获取他们的输入,然后将其传递给 service.js.
中的 http 调用
最初,$http.get 位于 API url 的一个长长的巨大字符串中,但我四处搜索了一下,似乎我应该在尝试时使用参数更改字符串的一部分。截至目前,我知道参数已硬编码到特定城市,但我想采用新输入并将 vm.city 的值传递给 $http.get 调用。
如果有人能提供帮助,我将不胜感激。谢谢!
controller.js
var app = angular.module('weatherApp.controllers', [])
app.controller('weatherCtrl', ['$scope','Data',
function($scope, Data) {
$scope.getForecastByLocation = function(myName) {
$scope.city = myName;
Data.getApps($scope.city);},
Data.getApps(city)
.then(function(data)){
//doing a bunch of things like converting units, etc
},
function(res){
if(res.status === 500) {
// server error, alert user somehow
} else {
// probably deal with these errors differently
}
}); // end of function
}]) // end of controller
service.js
.factory('Data', function($http, $q) {
var data = [],
lastRequestFailed = true,
promise;
return {
getApps: function() {
if(!promise || lastRequestFailed) {
promise = $http.get('http://api.openweathermap.org/data/2.5/weather?',{
params: {
q: Tokyo,
}
})
.then(function(res) {
lastRequestFailed = false;
data = res.data;
return data;
}, function(res) {
return $q.reject(res);
});
}
return promise;
}
}
});
向工厂方法传递参数与向普通函数传递参数没有区别。
首先,设置getApps
接受一个参数:
.factory('Data', function($http, $q){
// ...
return {
getApps: function(city){
promise = $http.get(URL, {
params: {q: city}
}).then( /* ... */ );
// ...
return promise;
}
};
});
然后传递你的论点:
$scope.getForecastByLocation = function(myName) {
$scope.city = myName;
Data.getApps($scope.city);
}
这就像为函数的上下文变量设置一个值。
Services.js
服务的简单示例。
.factory('RouteService', function() {
var route = {}; // $Object
var setRoute_ = function(obj)
{
return route = obj;
};
var getRoute_ = function()
{
if(typeof route == 'string')
{
return JSON.parse(route);
}
return null;
};
return {
setRoute: setRoute_,
getRoute: getRoute_
};
})
Controllers.js
服务使用的简单示例:
.controller('RoutesCtrl', function ($scope, RouteService) {
// This is only the set part.
var route = {
'some_key': 'some_value'
};
RouteService.setRoute(route);
})
我目前正在做一个项目来帮助我更好地理解 angularjs!我目前停留在如何将参数从控制器传递给服务。
在我的程序中,当用户在输入中单击按钮时,我创建了一个名为 "GetForecastByLocation" 的函数。我想从那里获取他们的输入,然后将其传递给 service.js.
中的 http 调用最初,$http.get 位于 API url 的一个长长的巨大字符串中,但我四处搜索了一下,似乎我应该在尝试时使用参数更改字符串的一部分。截至目前,我知道参数已硬编码到特定城市,但我想采用新输入并将 vm.city 的值传递给 $http.get 调用。
如果有人能提供帮助,我将不胜感激。谢谢!
controller.js
var app = angular.module('weatherApp.controllers', [])
app.controller('weatherCtrl', ['$scope','Data',
function($scope, Data) {
$scope.getForecastByLocation = function(myName) {
$scope.city = myName;
Data.getApps($scope.city);},
Data.getApps(city)
.then(function(data)){
//doing a bunch of things like converting units, etc
},
function(res){
if(res.status === 500) {
// server error, alert user somehow
} else {
// probably deal with these errors differently
}
}); // end of function
}]) // end of controller
service.js
.factory('Data', function($http, $q) {
var data = [],
lastRequestFailed = true,
promise;
return {
getApps: function() {
if(!promise || lastRequestFailed) {
promise = $http.get('http://api.openweathermap.org/data/2.5/weather?',{
params: {
q: Tokyo,
}
})
.then(function(res) {
lastRequestFailed = false;
data = res.data;
return data;
}, function(res) {
return $q.reject(res);
});
}
return promise;
}
}
});
向工厂方法传递参数与向普通函数传递参数没有区别。
首先,设置getApps
接受一个参数:
.factory('Data', function($http, $q){
// ...
return {
getApps: function(city){
promise = $http.get(URL, {
params: {q: city}
}).then( /* ... */ );
// ...
return promise;
}
};
});
然后传递你的论点:
$scope.getForecastByLocation = function(myName) {
$scope.city = myName;
Data.getApps($scope.city);
}
这就像为函数的上下文变量设置一个值。
Services.js
服务的简单示例。
.factory('RouteService', function() {
var route = {}; // $Object
var setRoute_ = function(obj)
{
return route = obj;
};
var getRoute_ = function()
{
if(typeof route == 'string')
{
return JSON.parse(route);
}
return null;
};
return {
setRoute: setRoute_,
getRoute: getRoute_
};
})
Controllers.js
服务使用的简单示例:
.controller('RoutesCtrl', function ($scope, RouteService) {
// This is only the set part.
var route = {
'some_key': 'some_value'
};
RouteService.setRoute(route);
})