【问题标题】:How to return a function into a scoped variable?如何将函数返回到作用域变量中?
【发布时间】:2016-02-15 13:33:05
【问题描述】:

我正在尝试使用可以分配给作用域角度变量的工厂。但是,每当我尝试附加它并使用 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);
}]);

【问题讨论】:

  • 您只是想调用 rssFeed 工厂并将其记录到控制台吗?在这种情况下,您需要调用函数console.log($scope.events()); 另外,我相信return events; 之后的行应该是};});
  • 这是一个正确返回函数的小提琴:jsfiddle.net/HB7LU/19871

标签: javascript angularjs


【解决方案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 是异步的,您应该传入一个回调并在请求完成时调用它,或者使用 Promise。

【讨论】:

  • 我能够使用此处找到的另一个 stackoverflow 问题 stackoverflow.com/questions/20369377/… 使回调函数正常工作。
  • 能够创建回调后,我无法在页面上显示对象数据,但是我可以将对象返回到控制台窗口。想法?
  • 没有看到你的代码就不能说。如果你把它放在一个 jsfiddle 中,发布链接,我会看看。
  • 您使用的是 jQuery $.get ajax 方法,它不会通知 Angular 它需要更新其绑定。如果您将其更改为使用 Angular 的 $http 提供程序,它将起作用。 (jsfiddle.net/9rv9ahcp/2)
  • 另外,您使用的网址似乎有误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 2021-11-28
相关资源
最近更新 更多