没有超时服务的Angular指令不起作用

时间:2016-10-19 13:16:36

标签: angularjs

在angularJS中,我编写了一个显示数据的指令。此数据由远程数据库中的http服务提取。

如果我在代码中应用 timeout 服务,那么当http服务在一秒内返回时,结果会显示在html页面上。

$timeout(function () {
         $scope.treeRoot = $scope.$eval('serviceResult') || {};
 }, 1000);

如果我不使用超时服务,那么页面不会显示任何数据,因为$ scope.treeRoot为空,例如

$scope.treeRoot = $scope.$eval('serviceResult') || {};

在生产中,http服务需要花费超过一秒的时间才能返回,是否存在任何通用解决方案。

2 个答案:

答案 0 :(得分:2)

您应该使用Angular的promises$http服务,该服务允许返回承诺。

承诺后,例如$ http请求已解决,您可以使用结果填充$scope.treeRoot

如果有帮助,请告诉我。

答案 1 :(得分:0)

AS在一个答案中建议您必须使用$ http promises并在响应中捕获结果。

以下是一些代码示例。

服务:

app.factory('myService', ['$http',
    function($http){
        var obj = {};

        obj.get = function (q) {
            return $http.get('/your_get_url')
        };
        obj.post = function (q, object) {
            return $http.post('/your_post_url', object)
        };

        return obj;
    }
]);

在你的控制器中,

allControllers.controller('changePasswordController', ['$scope','myService',
    function($scope,myService) {

        myService.get().then(function (result) {
                $scope.treeRoot = 'use your result here'
            },function error(result)
            {
                console.log(result)
            })      

    }
])

这将取代您的超时问题。