AngularJS:访问嵌套在$ scope中的对象

时间:2016-05-31 22:40:35

标签: angularjs angularjs-scope

我一直试图解决这个问题但没有成功。我知道getCurrentPosition()返回一个promise,并且在.then()函数中调用$ scope.map.center会起作用。我也理解$ scope在摘要周期中运行,当promise解析时,它的属性和对象会更新。我是这一切的新手,我希望我有意义。

那就是说,我非常想了解正在发生什么,因为console.log($ scope.map)按预期工作,{{map.center}}按预期显示,但是console.log(地图) .center)返回.then()函数之外的空对象。

预先感谢您的协助!



    $scope.map = {
            control: {},
            center: {},
            zoom: 16
        };

    $geolocation.getCurrentPosition({
        timeout: 60000,
        maximumAge: 250,
        enableHighAccuracy: true
    }).then(function(position) {
        $scope.map.center.latitude = position.coords.latitude;
        $scope.map.center.longitude = position.coords.longitude;
    });


    //Output
    
    console.log($scope.map); //returns full object including data within $scope.map.center

    console.log($scope.map.center); //returns an empty object. I am looking to convert this to an array using lodash. 

 {{ map.center  }} works fine and returns the coordinates of my current location




**编辑(控制台的上传图像)**

This is what I see in the console. First object is $scope.map Second object is $scope.map.center

2 个答案:

答案 0 :(得分:0)

getCurrentPosition()调用是异步的。因此,您对日志$scope.map$scope.map.center的调用只会返回您最初定义的内容。

只有在ajax调用结束时才会在范围内设置数据。

答案 1 :(得分:0)

当getCurrentPosition完成时(它是异步的)调用then函数并将数据发送回客户端。它是唯一可以可靠地访问由其检索的数据的地方。如果要进行异步调用,则必须使用then函数来访问数据。那就是打电话后发生的事情。在调用getCurrentPosition之后立即执行then(函数外部)后面的代码 - 而不是在它完成时执行。

如果你只是在寻找一个不同的位置放置这个代码,你可以从then函数调用另一个函数,并将位置对象传递给它。

$scope.map = {
        control: {},
        center: {},
        zoom: 16
    };

$geolocation.getCurrentPosition({
    timeout: 60000,
    maximumAge: 250,
    enableHighAccuracy: true
}).then( processMap(position))

function processMap(position) {
    $scope.map.center.latitude = position.coords.latitude;
    $scope.map.center.longitude = position.coords.longitude;
    console.log($scope.map); 
    console.log($scope.map.center); 
};

如果您正在寻找有关异步电话的更多信息,请参阅以下说明:

http://docs.apigee.com/api-baas/asynchronous-vs-synchronous-calls