angular js $ scope不保存json值

时间:2014-04-02 23:04:45

标签: angularjs

Angular正在失去我的JSON值,我正在试图找出原因。我想我需要做出承诺或超时,或者可能申请。我不太确定......

角度版本:1.2.1

 galleryApp.controller('GalleryCtrl', function ($scope, $http, $routeParams, $filter){
    $http.get('mygallery.json').success(function(data) {

        $scope.gallery = data;

        //DISPLAY: CONTENTS OF JSON IN OBJECT : WORKS 
        console.log($scope.gallery);
    });

    //DISPLAY: undefined : DOES NOT WORK AS EXPECTED
    console.log($scope.gallery);

    //DISPLAY: CONTENTS OF OBJECT: I can see scope.gallery exists!
    //I just can't seem to access scope.gallery directly outside of http.get()
    console.log($scope);

  });

注意:scope.gallery或“gallery”在我看来完美无缺! {{gallery.name}}等。

似乎幕后有一些角色正在做的范围,或者一些我不太理解的概念。

2 个答案:

答案 0 :(得分:1)

嗯,这是微不足道的,因为$ http.get是一个异步操作。因此,当它正在工作时,剩下的代码将完成。如果你记录$ scope.gallery它尚未定义。如果您记录$ scope,它仍未定义,但会在调用成功回调时更新。这种效果的原因只是console.log的功能,它不会写入当前快照而是写入对象本身,因此如果更改,控制台的输出将分别更新。但是一般来说,$ http.get之外的代码都不会像你期望的那样工作。因此,您应该使用成功回调或使用$ watch来跟踪更改。

另请参阅此文档:$http$q

答案 1 :(得分:0)

http.$get的结果是一个承诺(特别是HtmlPromise,请参阅$http docs)。承诺在$q docs中描述如下:

  

用于与对象交互的接口,该对象表示异步执行的操作的结果,并且可以在任何给定的时间点完成或不完成

success的{​​{1}}方法会在解析了promise(意味着操作完成)后运行回调函数。因此匿名函数异步运行。当它在回调之外被记录时,回调尚未运行,因此尚未设置范围变量。

我认为视图是预期的,因为http请求完成并且视图更新得如此之快,这是不可思议的。