将 angular 工厂转换为 angular es6 服务

Convert angular factory to angular es6 service

我有这个工厂:

.factory('FeedLoad', function ($resource) {
    return $resource('http://ajax.googleapis.com/ajax/services/feed/load', {}, {
        fetch: { method: 'JSONP', params: {v: '1.0', callback: 'JSON_CALLBACK'} }
    });
})

工厂是这样调用的:

FeedLoad.fetch({
    q: data.responseData.url
}, {}, function (data) { //lookup title
    if (data.responseStatus != 200) {
        return;
    }

    $scope.feed.title = data.responseData.feed.title;
});

我尝试通过这种方式将其转换为 angular ES6 服务:

class FeedParserService {
  constructor($resource) {
    'ngInject';

    RESOURCE.set(this, $resource);
  }
  feedLoad(){
    return RESOURCE.get(this)('http://ajax.googleapis.com/ajax/services/feed/lookup', {}, {
        fetch: { method: 'JSONP', params: {v: '1.0', callback: 'JSON_CALLBACK'} }
    });
  }
}

我试着这样称呼它:

data = feedParserService.feedLoad().fetch({
  q: this.dataSet[i].szUrl;
}, {}, function(data){

});

不过好像不行。我可以用一只手。

所以对于这个用例,您应该使用工厂而不是服务。

在大多数情况下使用factory方法,实际上应该使用service方法,并且是ES6中的class。这种情况是例外。您需要注册一个调用 $resouce factory 的工厂方法。

在 ES6 和(主要是 ES5,如果你用 require 替换导入)它应该看起来像这样:

import {app} from '../app';    

feedLoadFactory.$inject = ['$resource'];
feedLoadFactory($resource) {

    return 
        $resource('http://ajax.googleapis.com/ajax/services/feed/load', 
            {}, {
               fetch: { 
                   method: 'JSONP', 
                   params: {v: '1.0', callback: 'JSON_CALLBACK'} 
               }
        });
}

app.factory('feedLoad', feelLoadFactory);

然后你可以将其作为feedLoad注入并作为feedLoad.fetch...

使用