Я новичок в AngularJs. Я вызываю вызов http
get, чтобы получить список имен, и я хочу его, как только приложение загрузится. Поэтому я написал логику, чтобы получить список имен в функции run
на angularjs. Я использую настраиваемую service
для извлечения имен и вызова функции внутри метода run
.
Код в методе службы выглядит следующим образом:
angular.module('myApp')
.service('fetchData', function ($http, $rootScope) {
// AngularJS will instantiate a singleton by calling "new" on this function
this.fetchNames = function() {
$http.get('http://hostname:port/names').success(function (person) {
$rootScope.names = person.names;
});
}
В моем app.js у меня есть код, как показано ниже:
angular.module('myApp', ['ngRoute'])
.config(function ($routeProvider, $locationProvider) {
$routeProvider
.otherwise({
redirectTo: '/'
});
$locationProvider.html5Mode(true);
})
.run (function($rootScope, fetchData){
//first make an ajax call and fetch all the applicatons for the given BU
fetchData.fetchNames();
});
Но по имени fetchNames
имена образуют HTTP-вызов, метод выполнения уже выполнен.
Пожалуйста, дайте мне знать, где я ошибаюсь.
В вашем сервисе вы можете вернуть обещание, а затем справиться с успехом в своей функции запуска.
angular.module('myApp')
.service('fetchData', function ($http, $rootScope) {
// AngularJS will instantiate a singleton by calling "new" on this function
this.fetchNames = function() {
return $http.get('http://hostname:port/names');
}
Теперь вы можете обработать событие успеха в режиме run.
.run (['$rootScope', 'fetchData', function($rootScope, fetchData){
//first make an ajax call and fetch all the applicatons for the given BU
fetchData.fetchNames().success(function (person) {
$rootScope.names = person.names;
);
}]);
run
, директива была бы вызвана. Каков наилучший способ сделать имена доступными для директивы.
run
но, поскольку это асинхронный режим, я не получаю значение в функцииrun
.