Javascript 配置解析中的角度链延迟不工作
一天中的大部分时间,我都在为此头疼,无法将$scope.weatherData解析为除未定义之外的任何内容:( 这是我的view1控制器:Javascript 配置解析中的角度链延迟不工作,javascript,angularjs,promise,deferred,Javascript,Angularjs,Promise,Deferred,一天中的大部分时间,我都在为此头疼,无法将$scope.weatherData解析为除未定义之外的任何内容:( 这是我的view1控制器: 'use strict'; angular.module('myApp.view1', ['ngRoute']) .config(['$routeProvider', function ($routeProvider) { $routeProvider.when('/view1', { templateUr
'use strict';
angular.module('myApp.view1', ['ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/view1', {
templateUrl: 'view1/view1.html',
controller: 'View1Ctrl',
resolve: {
weatherData: ['$q', 'weatherSvc', function ($q, weatherSvc, options) {
var lat = 0;
var lon = 0;
var deferred = $q.defer();
navigator.geolocation.getCurrentPosition(
deferred.resolve,
deferred.reject,
options);
deferred.promise.then(function (position) {
lat = position.coords.latitude;
lon = position.coords.longitude;
console.log('lat:' + lat + ' lon:' + lon);
var data = weatherSvc.query(lat, lon);
console.log(data); // <-- data is a promise at this point but log has already fired in the controller
data.then(function(data){
console.log(data.data);
return data;
});
});
}]
}
});
}])
.controller('View1Ctrl', ['$scope', 'weatherData', function ($scope, weatherData) {
$scope.weatherData = weatherData;
console.log(weatherData);
}]);
“严格使用”;
angular.module('myApp.view1',['ngRoute']))
.config(['$routeProvider',函数($routeProvider){
$routeProvider.when(“/view1”{
templateUrl:'view1/view1.html',
控制器:“View1Ctrl”,
决心:{
weatherData:['$q','weatherSvc',函数($q,weatherSvc,选项){
var-lat=0;
var-lon=0;
var deferred=$q.deferred();
navigator.geolocation.getCurrentPosition(
下决心,
拒绝,
选择权);
延期。承诺。然后(职能(职位){
纬度=位置坐标纬度;
lon=位置坐标经度;
log('lat:'+lat+'lon:'+lon);
var数据=weatherSvc.query(纬度、经度);
console.log(数据);//=min)?值:min;
value=(您需要的值返回延迟。promise.then(…
在weatherData
解析函数和返回数据中)。然后(…<代码> >里面,什么是<代码>选项< /代码>?谢谢!编辑:选项来自一个示例,可能会被删除,因为我不认为我需要传递任何东西。@ Phil请考虑把它作为答案并解释为什么。“BenjaminGruenbaum If Phil不会很快回答它,我会抛出一个答案。这主要是个例子。f被尝试并迷失在末日的三角中。一旦菲尔指出我需要做什么,我意识到我做了什么以及为什么它不起作用。你需要延迟返回。承诺。然后(…
在你的天气数据中解析函数和返回数据。然后(…<代码> >里面,什么是<代码>选项< /代码>?谢谢!编辑:选项来自一个示例,可能会被删除,因为我不认为我需要传递任何东西。@ Phil请考虑把它作为答案并解释为什么。“BenjaminGruenbaum If Phil不会很快回答它,我会抛出一个答案。这主要是个例子。当菲尔指出我需要做什么时,我意识到我做了什么,为什么它不起作用。
angular.module('myApp.services', [])
.factory('weatherSvc', ['$http', function ($http) {
'use strict';
function rangeLimit(value, min, max) {
value = (value >= min) ? value : min;
value = (value <= max) ? value : max;
return value;
}
var sdo = {
query: function (lat, lon, refresh) {
// validations
refresh = refresh || false;
// valid lat = -90...90
// valid lon = -180...180
lat = rangeLimit(lat, -90, 90);
lon = rangeLimit(lon, -180, 180);
var promise = $http({
method: 'GET',
url: 'http://api.openweathermap.org/data/2.5/forecast/daily?lat=' + lat + '&lon=' + lon + '&mode=json'
});
promise.success(function (data, status, headers, conf) {
return data;
});
return promise;
}
};
return sdo;
}]);