2016-10-19 3 views
0

В angularJS я написал директиву для отображения данных. Эти данные извлекаются службой http из удаленной базы данных.Угловая директива без тайм-аута не работает

Если я применяю ниже тайм-аут услуга в коде, то результат отображается на странице html, поскольку HTTP-сервис возвращается за одну секунду.

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

Если я не использую службы тайм-аута, то страница не показывает каких-либо данных, поскольку $ scope.treeRoot пуст, например

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

В процессе производства услуга http может занять более одной секунды, чтобы вернуться, существует ли какое-либо общее решение.

+0

Можете ли вы показать HTML и функцию ссылки директивы? –

+0

это кажется странным местом для использования '$ scope. $ Eval'. если вы показываете функцию * whole *, а не только '$ timeout', как [mcve], это может иметь больше смысла. – Claies

ответ

2

Вы должны использовать услугу Angular's promises или $http, которая позволяет вернуть обещание.

После обещания, например. $ http request, разрешен, вы можете заполнить $scope.treeRoot с результатами.

Дайте мне знать, если это поможет.

0

AS, предлагаемый в одном ответе, вы должны использовать обещания $ 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) 
      })  

    } 
]) 

Это заменяет проблему тайм-аута.

+0

@Moazzam, проголосовать за мой ans, если вы его исправьте. – Sravan

Смежные вопросы