2015-11-13 2 views
1

Я пытаюсь использовать фабрику, которую я могу присвоить переменной угловой переменной. Однако всякий раз, когда я присоединяюсь к этому и использую console.log для возвращения этой переменной, я возвращаюсь с функцией как текст, а не как значение. Есть ли способ, которым я могу это исправить?Как вернуть функцию в переменную с областью?

========== ========== JS

annApp.factory('rssFeed', function() 
    { 
    return function() 
    { 
     var events = []; 
     $.get('xmlfile', 
     function(xml) 
    { 
    var json = $.xml2json(xml); 
    jsonb = JSON.stringify(json, undefined, 3); 
    // var events = []; 
     var description = json['#document']['rss']['channel']['item']['description']; 
     var title = json['#document']['rss']['channel']['item']['title']; 
     var date = json['#document']['rss']['channel']['item']['pubDate']; 
     events.push({'title': title, 'description':description, 'date': date}); 
     return events; 
    }); 
    return events; 
} 

annApp.controller('calendar', ['$scope', 'rssFeed', function($scope, rssFeed){ 
    $scope.events = rssFeed; 
    console.log($scope.events); 
}]); 
+0

Вы просто хотите позвонить на завод rssFeed и записать его на консоль? В этом случае вам нужно вызвать функцию 'console.log ($ scope.events());' Также я считаю, что строка после 'return events' должна быть'};}); ' – DenimChicken

+0

Вот скрипка, которая правильно возвращающ функцию: http://jsfiddle.net/HB7LU/19871/ – DenimChicken

ответ

1

Если вы пытаетесь распечатать ссылкой на саму функцию, то, что вам есть правильно (кроме ошибки синтаксиса упомянутой DenimChicken):

annApp.factory('rssFeed', function(){ 
    return function(){ 
     var events = []; 
     $.get('xmlfile', function(xml){ 
      var json = $.xml2json(xml); 
      jsonb = JSON.stringify(json, undefined, 3); 
      var description = json['#document']['rss']['channel']['item']['description']; 
      var title = json['#document']['rss']['channel']['item']['title']; 
      var date = json['#document']['rss']['channel']['item']['pubDate']; 
      events.push({'title': title, 'description':description, 'date': date}); 
     }); 
     return events; 
    }; 
}); // <-- added this 

Если вы пытаетесь распечатать значение возврата из функции, то нужно вызвать функцию, поставив круглые скобки после наименование:

console.log($scope.events()); 

Однако, поскольку $.get является асинхронным, вы должны либо пройти обратный вызов, либо позвонить ему, когда запрос будет завершен, либо использовать обещания.

+0

Я смог получить функцию обратного вызова для того чтобы работать правильно using другой вопрос stackoverflow найденный здесь http://stackoverflow.com/questions/20369377/how-to- использовать HTTP-получить-в-angularjs-правильно в конкретных-для-ан-внешнего-апи-кал. –

+0

После возможности создания обратного вызова я не могу отображать данные объекта на странице, однако я могу вернуть объект в окно консоли. Идеи? –

+0

Не могу сказать, не видя свой код. Если вы поместите его в jsfiddle, отправьте ссылку, и я посмотрю. –