通过ajax请求初始化控制器

时间:2013-09-11 22:56:33

标签: javascript ajax angularjs

我有AngularJs控制器:

function MyController($scope, $http) {
   // as $http.get() is async, success() returns promise but 
   // I need the actual value 'items'
   var promise = $http.get(...)
       .success(function(response) {return response.items;});
   <waitForAjaxCall>
   $scope.items = promise.get?();
   $scope.firstItem = $scope.items[0];

   //do stuff using $scope.firstItem
}

var myApp = angular.module('myApp',[]);
myApp.controller('MyController', ['$scope', '$http', MyController]);

如何确保$scope.items$scope.firstItem = ...分配之前由ajax调用返回的值初始化items?我看到的另一种方法是将{{1}}包装在调用$ http的angularjs工厂中,但我仍然需要等待ajax调用在此工厂内完成。

2 个答案:

答案 0 :(得分:1)

您不能同步等待Ajax调用完成。您需要在success回调中初始化范围:

function MyController($scope, $http) {
    function init(items) {
        $scope.items = items;
        $scope.firstItem = $scope.items[0];

        //do stuff using $scope.firstItem
    }

    $http.get(...)
        .success(function(data) {
            init(data.items);               
        });
}

答案 1 :(得分:0)

我实际上就是这样做的:

<div>{{items[0].name}}</div>

每当设置$scope.items时,第一个项目就会绑定在那里。