2016-04-11 4 views
1

Я пытаюсь загрузить данные JSON из внешнего файла, используя службу в AngularJS.

myApp.service('ContactsListService', function($http) { 
    var contactsList = $http.get('js/contacts.json').success(function(data){ 
    return data; 
    }); 
    console.log(contactsList); // prints some $http object 
    return { 
    'contactsList': contactsList; 
    }; 
} 

myApp.controller('ContactDisplayController',['$scope','ContactsListService',function($scope, ContactsListService){ 
$scope.contacts = ContactsListService.contactsList; 
console.log(ContactsListService.contactsList); // prints 'undefined' here 
}]); 

**JSON file:** 

     [ 
      { 
      name: 'Steph Curry', 
      mobile: '111111111' 
      }, 
      { 
      name: 'Lebron James', 
      mobile: '2323232323' 
     } 
    ] 

Я хочу использовать данные из службы в контроллере, я не могу передать эти данные. Исправьте меня, если я неправильно ввожу службу.

Спасибо!

ответ

2

Вы сохраняете обещание $ http, а не ответ от этого вызова ajax. Лучший подход заключается в том, чтобы служба определила метод, который вернул обещание, и для вашего контроллера, чтобы получить это обещание и использовать результат.

myApp.service('ContactsListService', function($http) { 
    this.getContactsList = function() { 
    return $http.get('js/contacts.json'); 
    }; 
}); 

myApp.controller('ContactDisplayController',['$scope','ContactsListService',function($scope, ContactsListService){ 
    ContactsListService.getContactsList().success(function(data) { 
    $scope.contacts = data; 
    }); 
}]); 
+0

Спасибо за ответ Джо, я пытался в своем пути, я не могу напечатать данные вне зависимости успеха: 'myApp.controller («ContactDisplayController», [«$ сфера»,«ContactsListService», function ($ scope, ContactsListService) { ContactsListService.getContactsList(). success (функция (данные) { $ scope.contacts = data; console.log ($ scope.contacts); // выводит данные здесь }) ; console.log ($ scope.contacts); // выводит здесь неопределенные значения. }]); ' – Jarvis

0

Спасибо за ответ Джо, я пытался в своем пути, я не могу печатать данные за пределами функции успеха:

myApp.controller('ContactDisplayController',['$scope','ContactsListService',function($scope, ContactsListService){ 
    ContactsListService.getContactsList().success(function(data) { 
    $scope.contacts = data; 
    console.log($scope.contacts); // prints data here. 
    }); 
console.log($scope.contacts); // prints undefined here. 
}]); 
+0

Это вызвано тем, что второй console.log выполняется до того, как результат возвращается из запроса ajax. Правильно, что контакты IS undefined t t это время. – KreepN

+0

Используйте комментарии/изменения для ответа, а не отправляйте ответ на свой вопрос. Ваш 'console.log' выполняется до того, как у вас есть данные, когда вы используете async ajax для получения данных. –

+0

Спасибо, KreepN, @JoeyCiechanowicz за объяснение и ответ. Полностью получил его. – Jarvis

0

Просто нужно знать, как это течет. Получите данные, затем сделайте что-нибудь с этим, прямо там, в обработке этих данных.

myApp.controller('ContactDisplayController',['$scope','ContactsListService',function($scope, ContactsListService){ 
    $scope.contacts = []; //initialize it 
     ContactsListService.getContactsList().success(function(data) { 
     $scope.contacts = data; 
     //now do stuff with it 
     }); 
    //console logging here happens before your async call returns 
    }]);