没有timeout服务的Angular指令无法工作



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

如果我在代码中应用以下timeout服务,那么结果将在html页面上显示为http服务在一秒钟返回。

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

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

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

在生产环境中,http服务可能需要超过一秒的时间才能返回,是否有通用的解决方案

你应该使用Angular的promises或$http服务,它们允许返回一个承诺。

在承诺(例如$http请求)被解析后,你可以用结果填充$scope.treeRoot

如果有帮助请告诉我。

正如在一个答案中建议的那样,您必须使用$http承诺并在响应中捕获结果。

下面是一个带有一些代码的示例。

服务:

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)
            })      
    }
])

最新更新