将角度工厂转换为角度es6服务

时间:2016-03-30 12:03:01

标签: angularjs ecmascript-6 angular-services

我有这个工厂:

.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;
});

我试过这种方法将其转换为角度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){

});

但它似乎不起作用。我可以用一只手。

1 个答案:

答案 0 :(得分:0)

因此,对于此用例,您应该使用工厂而不是服务。

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

在ES6和(如果你用require替换import,主要是ES5)它应该是这样的:

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...