2015-09-08 68 views
3

我與角初學者,我試圖瞭解我是否應該用戶工廠那樣:我的工廠應該用輔助方法返回一個對象還是應該使用原型?

app.factory('FoobarServices', ['$http', function ($http) { 

    var Foobar = { 
     // Model 
    }; 

    return { 
     getFoobar: function() { 

     }, 
     setFoobar: function (Foobar) { 

     }, 
     update: function (foobar) { 

     }, 
     delete: function (id) 

     } 
    }; 
}]); 

或者類似的東西:

app.factory('Fooba', ['$http', function($http) { 
    function Foobar(foobar) { 
     // Initialize foobar 
    }; 
    Foobar.prototype = { 
     getFoobars: function() { 

     }, 
     setFoobar: function(foobar) { 

     }, 
     update: function(foobar) { 

     }, 
     delete: function(id) { 

     }, 
    }; 
    return Foobar; 
}]); 

我不知道要了解什麼是每種模式的優缺點,以及哪一種更適合角度項目。

請問我可以使用哪一個?

+0

作爲一個經驗法則,在'factory'應該不會返回方法:當你不希望處理上下文(this)你的業務邏輯中是非常有用的。工廠用於返回「對象」。如果你只想返回方法,你應該使用'service'。 :) – AdityaParab

+0

對於單身物件,你不應該使用原型。 – Bergi

回答

2

這取決於你想如何使用你的服務。 工廠通常用於存儲一些構造函數,您可以稍後從中實例化一些對象。

例如:

app.factory('Client', function() { 
    function Client (name) { 
    this.name = name; 
    } 

    Client.prototype.sayHello = function() { 
    console.log('Hello, my name is ' + this.name + '!'); 
    } 

    return Client; 
}) 

.controller('ClientController', function (Client) { 
    var bob = new Client('Bob'); 
}) 

如果你的服務是單身,則可以在service而不是factory註冊和角度會爲你創建一個實例。 或者你可以註冊爲工廠,但返回一些對象的方法。

app.factory('ClientStorage', function() { 

    function set() { 
     // to be implemented 
    } 

    function get() { 
     // to be implemented 
    } 

    return { 
     get: get, 
     set: set 
    }; 
}) 
相關問題