AngularJS的可变范围问题

时间:2014-08-22 18:36:53

标签: javascript angularjs scope

我的javascript页面有一个非常奇怪的问题:

    $scope.ptfs = new Array();

    $http.get('trades.json').success(function(data) {
            data.portfolios.forEach(function(p){
                $scope.ptfs.push(new Portfolio(p.id , p.name));

                $scope.message3 = $scope.ptfs[0];

            })
    })

    $scope.message2 = $scope.ptfs;
    $scope.message4 = $scope.ptfs[0];

HTML:

2 : {{message2}}<br>
3 : {{message3}}<br>
4 : {{message4}}<br>

我得到的结果是: 2:[{&#34; id&#34;:0,&#34; name&#34;:&#34; CAN REAL&#34;,&#34;交易&#34;:[]},{&# 34; ID&#34;:1,&#34;名称&#34;:&#34; INVESTOPEDIA&#34;&#34;交易&#34;:[]}] 3:{&#34; id&#34;:0,&#34; name&#34;:&#34; CAN REAL&#34;,&#34;交易&#34;:[]} 4:

知道原因: - $ scope.message3 = $ scope.ptfs [0];和 - $ scope.message4 = $ scope.ptfs [0];

不会返回相同的结果吗?

谢谢, 尼古拉斯

1 个答案:

答案 0 :(得分:2)

您遇到的问题是由于代码的异步性质。在将项目推送到$scope.message4 = $scope.ptfs[0];之前执行$scope.ptfs。在分配message4时,您的数组为空。

$http.get('trades.json')返回一个承诺。一旦这个承诺得到解决,即。一旦服务器响应您的请求,就会执行then函数的回调$scope.ptfs