Angular:访问成功响应

时间:2015-04-07 07:39:32

标签: angularjs angularjs-scope

我正在尝试学习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

2 个答案:

答案 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上执行某项任务,请在成功方法中执行此操作。