我有一个控制器,我试图在$ scope.weather中存储信息,然后使用它的内容传递给一个函数。当我在使用一个函数时记录$ scope.weather [0] .latitude的结果,但是当我在同一个控制器中调用另一个函数时,结果将返回undefined。 $ scope不能在同一个控制器中使用吗?这也属于同一个功能。
angular.module('CityCtrl', []).controller('CityController', ['$scope', '$http', 'City', function($scope, $http, City){
$scope.update = function (zip) {
City.get({zip : zip}).success(function(response){
$scope.weather = response
}).then(function(response){
$scope.weather = response.data;
// This is returning the expected result
console.log($scope.weather[0].latitude;
})
if(zip.length === 5){
// This is coming back undefined
console.log($scope.weather[0].latitude);
var box = getBoundingBox([$scope.weather[0].latitude, $scope.weather[0].longitude], 50);
City.matches(box[1], box[3], box[0], box[2]).success(function(response){
$scope.matches = response
}).then(function(response){
$scope.matches = response.data;
console.log($scope.matches);
})
}
}
}]);
答案 0 :(得分:1)
这是一个操作顺序问题。
if语句console.log($scope.weather[0].latitude)
中的$scope.weather
实际上尚未设置,因为City.get()
调用是异步的。这意味着在City服务返回成功响应之前不会设置$scope.weather
,在您的情况下将在if语句中的代码块之后执行。
为了使您的if语句代码能够访问$scope.weather
,您需要将其包含在代码的.then(function() { // if logic here }
部分中。
值得注意的是,City.get().success()
和City.get().then(successFunction)
几乎都在做同样的事情。你应该使用其中一个,但你不应该同时使用它们。