2015-11-18 30 views
0

我正在重寫ES6中的所有AngularJs代碼。我有一個用戶服務,是一個工廠,返回$resource對象:

angular.module('cdcApp') 
    .factory('User', function ($resource) { 
    return $resource('/api/users/:id/:controller', { 
     id: '@_id' 
    }, 
    { 
     changePassword: { 
     method: 'PUT', 
     params: { 
      controller:'password' 
     } 
     }, 
     get: { 
     method: 'GET', 
     params: { 
      id:'me' 
     } 
     } 
    }); 
    }); 

它已被改寫爲以下幾點:

class User { 
    constructor($resource) { 
    this.$resource = $resource; 
    this.resource = this.$resource('/api/users/:id/:controller', { 
     id: '@_id' 
    }, { 
     changePassword: { 
     method: 'PUT', 
     params: { 
      controller: 'password' 
     } 
     }, 
     get: { 
     method: 'GET', 
     params: { 
      id: 'me' 
     } 
     } 
    }); 

    } 
} 
angular.module('cdcApp') 
    .service('User', User); 

然而,它打破了我的舊控制器,因爲我必須使用User.resource代替正常情況下正常的User。有沒有什麼解決方法來實現這一目標?

+3

工廠不是一個班級。你爲什麼要用'class'語法來編寫它? – Bergi

+0

@Bergi這就是爲什麼我重寫它作爲服務,而不是工廠。 – lvarayut

+0

但是你*想*一個返回資源的工廠,不是嗎?你的代碼沒有錯,不需要重寫它。 – Bergi

回答

2

嘗試:

export default class Factory { 
    constructor (API_ENDPOINT, $resource) { 
    return $resource(API_ENDPOINT + "/url", {id: "@id"}, { 
     update: { 
     method: "PUT" 
     } 
    }); 
    } 
    static activate(API_ENDPOINT, $resource) { 
    Factory.instance = new Factory(API_ENDPOINT, $resource); 
    return Factory.instance; 
    } 
} 

Factory.$inject = ["API_ENDPOINT", "$resource"]; 

那麼你的模塊中:

import Factory from "path_to_your_factory_file"; 
angular.module(name, [ngResource]).factory("Factory", Factory.activate); 

享受!