Javascript AngularJS中的$resource web服务连接配置到底意味着什么?
我是AngularJS的新手,我正在学习一个教程,展示如何访问这个外部天气预报API:检索和使用天气信息 因此,在我的应用程序中,我有这样一个控制器:Javascript AngularJS中的$resource web服务连接配置到底意味着什么?,javascript,json,angularjs,javascript-framework,angularjs-resource,Javascript,Json,Angularjs,Javascript Framework,Angularjs Resource,我是AngularJS的新手,我正在学习一个教程,展示如何访问这个外部天气预报API:检索和使用天气信息 因此,在我的应用程序中,我有这样一个控制器: weatherApp.controller('forecastController', ['$scope', '$resource', '$routeParams', 'cityService', function($scope, $resource, $routeParams, cityService) { // It contain
weatherApp.controller('forecastController', ['$scope', '$resource', '$routeParams', 'cityService', function($scope, $resource, $routeParams, cityService) {
// It contain the city selected in the view:
$scope.city = cityService.city;
$scope.days = $routeParams.days || 2;
$scope.weatherAPI = $resource("http://api.openweathermap.org/data/2.5/forecast/daily",
{ APPID: 'MY_PERSONAL_KEY',
callback: "JSON_CALLBACK",
cnt: 5
},
{ get: { method: "JSONP" }});
$scope.weatherResult = $scope.weatherAPI.get({ q: $scope.city, cnt: $scope.days });
$scope.convertToFahrenheit = function(degK) {
return Math.round((1.8 * (degK - 273)) + 32);
}
$scope.convertToDate = function(dt) {
return new Date(dt * 1000);
};
}]);
我发现在理解服务的确切调用方式和所需信息方面存在一些困难
因此,根据我所了解的情况(但我绝对不确定,因此,如果我做了错误的断言,请纠正我),我有以下情况:
1) 我将Angular提供的$resource服务注入控制器,据我所知,它是一个可以用于用户友好的RESTful web服务交互的对象
因此,通过这一行:
$scope.city = cityService.city;
我将一个城市(由用户在视图中插入)放入此控制器的$scope的城市属性中,该城市将作为用户用于webservice查询的参数之一
然后,我在$scope对象上创建weatherAPI属性,我认为它应该表示访问此资源的方式
$scope.weatherAPI = $resource("http://api.openweathermap.org/data/2.5/forecast/daily",
{ APPID: 'MY_PERSONAL_KEY',
callback: "JSON_CALLBACK"
},
{ get: { method: "JSONP" }});
因此,我认为weatherAPI是一个资源对象,由$resource服务提供(或者我遗漏了什么?)
在此基础上,我设置了web服务URL()和几个JSON对象,它们是:
{
APPID: 'MY_PERSONAL_KEY',
callback: "JSON_CALLBACK"
},
在其中,我声明了APPID字段,该字段是我使用该键的个人密钥和回调:“JSON\U回调”字段。什么确切地表示这个回调字段
第二个目标是:
{get:{method:“JSONP”}
好的,这两个物体的形状对我来说是相当模糊的
确切的定义是什么?在我看来,这与我的应用程序的安全性有关,但我绝对不确定
最后,它通过以下方式从web服务检索数据:
$scope.weatherResult = $scope.weatherAPI.get({ q: $scope.city, cnt: $scope.days });
我认为我只是在传递2参数(类似于经典HTTPrequest的?q=value&?cnt=value)
所以我认为weatherAPI是一个由$resource服务提供的资源对象(或者我遗漏了什么?)
不,你没有遗漏任何东西weatherAPI
正是您所认为的
在其中,我声明了APPID字段,它是我的个人密钥,用于使用该密钥和回调:“JSON_callback”字段。什么确切地表示这个回调字段
callback
字段只是在每次请求时传递给API的默认GET参数。它设置在这里,所以您不必每次从API请求内容时都传递它
确切的定义是什么?在我看来,这与我的应用程序的安全性有关,但我绝对不确定
传递到$resource
调用中的第三个参数是API上可用方法的定义
在外部对象中,键是方法的名称。它只是那个方法可用的名称。值是该方法的设置对象,在这种情况下,它只指定方法的类型,即“JSONP”
JSONP是一种特殊类型的请求,它只能是一个“GET”请求,浏览器不允许在这里“POST”。JSONP必须返回简单的函数调用,向其中传递一个参数JSON和结果数据。此函数将在JavaScript上调用
JSONP只是进行跨站点调用的一种变通方法