如何在ng-controller中提供延迟

时间:2015-03-28 21:18:25

标签: angularjs

一旦Html页面被加载,它就会调用SuperCategoryController,我将超类别分配给$ scope变量。

$scope.SuperCategories = SuperCategoryService.GetSuperCategories();

但是这个控制器依赖于服务,而服务又调用http请求。所以当时pf赋值http请求没有完成。所以$ scope.SuperCategories被定义为未定义。

sampleApp.service('SuperCategoryService', ['$http', function ($http){

    var URL = 'http://localhost/cgi-bin/superCategory.pl';
    var SuperCategories;

    $http({
            method: 'POST',
            url: URL,
            data: "action=GET",
            headers: {'Content-Type': 'application/x-www-form-urlencoded'}
        }).
        success(function (data) {
            alert (data);
            if (data != null || data != 'undefined') {
                SuperCategories = data;
            }   

        })
        .error(function (error) {
            alert (error.message);
            //$scope.status = 'Unable to retrieve super categories' + error.message;
        }); 

    //simply returns the SuperCategories list
    this.GetSuperCategories = function () {
        //alert (SuperCategories);
        return SuperCategories;
    }
}]);



sampleApp.controller('SuperCategoryController', ['$scope', 'SuperCategoryService', function ($scope, SuperCategoryService){

    $scope.SuperCategories = SuperCategoryService.GetSuperCategories();

    $scope.LoadSuperCategoryMapping = function()
    {
        alert ($scope.SelectedSuperCategory.id);
    }

}]);

如何以正确的方式解决这个问题。

1 个答案:

答案 0 :(得分:4)

我自己没有尝试过这个代码,但是我会使用工厂和承诺来确保数据已经加载。这些方面的东西:

sampleApp.factory('SuperCategoryService', ['$http', function ($http){

    return {

        GetSuperCategories: function () {

            var URL = 'http://localhost/cgi-bin/superCategory.pl';
            return $http.get(URL);
        }

    }

}]);



sampleApp.controller('SuperCategoryController', ['$scope', 'SuperCategoryService', function ($scope, SuperCategoryService){

    $scope.SuperCategories = function() {

        SuperCategoryService.GetSuperCategories()
            .then(function(d) {
                if (d.data != undefined) {
                    // Your data should be loaded here
                    console.log(d.data);
                    $scope.SuperCategories = d.data;
                }
            })
            .error(function(data, status) {
                // Errors here
            });
    }

}]);