我正在尝试学习Angular,并编写了以下代码来查找我的IP。我可以轻松地访问并将IP打印到SUCCESS内的控制台,但无法在GET方法之外访问它。即使将变量设置为SUCCESS内部的响应也无法完成工作。任何帮助都将受到高度赞赏。
var app = angular.module('myApp', []);
var ip;
app.controller('customersCtrl', function($scope, $http) {
console.log("Console Works");
$http.get("https://api.ipify.org/")
.success(function (response) {
console.log("Success " + response);
ip = response;
console.log("IP Inside: " + ip);
});
});
console.log("IP Outside: " + ip);
控制台打印:
IP Outside: undefined
控制台工作
成功11.222.222.11
IP Inside:11.222.222.11
答案 0 :(得分:1)
这就是我们所谓的异步世界。
$ http.get发送异步调用并等待你的promise的回调(成功或错误)语句console.log(" IP Inside:" + ip);外面已经执行但你仍然没有任何价值。
你可以像
一样访问外面的varable var app = angular.module('myApp', []);
var ip;
app.controller('customersCtrl', function($scope, $http) {
console.log("Console Works");
$scope.ip="";
$http.get("https://api.ipify.org/")
.success(function (response) {
console.log("Success " + response);
$scope.ip = response;
console.log("IP Inside: " + $scope.ip);
});
});
$scope.$watch('ip',funciton(newVal){
console.log(newVal); // It is new value of your IP
ip=newVal;
});
答案 1 :(得分:0)
因为javascript是异步的。因此在成功响应之前调用console.log("IP Outside: " + ip);
。因此,如果您想在IP上执行某项任务,请在成功方法中执行此操作。