AngularJS:无法通过Ajax使用ng-init初始化

时间:2013-09-05 06:14:41

标签: angularjs

HTML:

<div class="span10" ng-controller="GroupFieldsCntl" ng-init="init()">
    <div ng-repeat="field in fields"></div>
</div>

GroupFieldCntl:

function GroupFieldsCntl($scope) {
    $scope.fields = [];

    $scope.init = function() {
            // Get fields.
        $.get(ctx + 'admin/fields/fieldsJSON', function(data) {
            for(var i in data) {
                $scope.fields.push(data[i]);
            }
        });
    }
}

我确定ajax调用得到了正确的响应,但是html页面没有显示这些数据。

2 个答案:

答案 0 :(得分:0)

就像这里的评论员所说: 1.使用$ http.get而不是$ .get。这是Angular的Ajax,你应该使用它。 [它需要注入控制器] 2.如果循环进入var i in data,您可能会循环遍历非数据属性的方法,如建议的那样,使用

for (var i in data) {
    if data.hasOwnProperty(i)
       //do something
    }
}

如果你认为坏数据不会出现问题,你总是可以使用以下语法让已解决的promise(get request)将自己解析为$ scope变量:

$scope.fields = $http.get(tx + 'admin/fields/fieldsJSON');

当数据到达时,字段将在解析后自动包含JSON响应。这是一个不处理错误响应的快捷方式。

答案 1 :(得分:0)

对数据所做的更改只有在您使用angular函数执行或在其他函数上使用$apply时才会触发视图更改。因此,评论建议您可以(应该)使用angular $http服务,或在$apply内调用您的函数。