2016-03-30 121 views
1

我有這樣的工廠:轉換角度工廠角器ES6服務

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

}); 

但它似乎並沒有工作。我可以用手。

+0

只是爲了得到這樣做:這是'feedCheck'和'feedLoad'之間的混合嗎? –

+0

對不起,我只是糾正它。我的服務有兩個方法,我只是在這個例子中放了一個,我選錯了一個。 – Razgort

+0

是的,我想它可能是這樣的,但你永遠不知道。 –

回答

0

因此,對於這種用例,您應該使用工廠而不是服務。

在使用factory方法的大多數情況下,它實際上應該使用service方法,並在ES6中使用class。這種情況是例外。您需要註冊一個調用$resouce factory的工廠方法。

在ES6和(而且大多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...

+0

我會在幾個小時內嘗試並保持更新。 Thx爲答案人! – Razgort