2015-05-26 56 views
16

可以定義一個角度$resource,在使用new()創建時始終具有相同的默認值?

舉例來說,如果我有以下資源定義:

var Drawer = $resource('/drawer/:drawerId', { drawerId: '@id'}); 

和抽屜對象需要有一個我想總是被初始化爲空數組[]一個「襪子」的屬性,也許有些人像'timesOpened'爲0,或類似的東西。

這樣做會像唯一的辦法:

var newDrawer = new Drawer({ socks: [], timesOpened: 0}); 

我想在同一個服務,我有我的資源定義(姑且稱之爲drawerService)這樣的默認/初始化對象:

defaultDrawer = { socks: [], timesOpened: 0}; 

,然後創建資源時:

//New drawer with defaults 
var newDrawer = new drawerService.Drawer(drawerService.defaultDrawer); 
//New drawer with defaults and some other initialization 
var anotherDrawer = new drawerService.Drawer(angular.extend(drawerService.defaultDrawer, {material: 'plastic'}); 

這是做這件事的唯一方法嗎?

回答

14

你是對的,沒有簡單的方法來做到這一點;它不是Angular支持的功能。一個更清潔的方式,你可能會這樣做是通過在抽屜服務中創建一個抽屜工廠。它可能是這個樣子:

angular.module('app').factory('drawerService', function() { 

    var Drawer = $resource('/drawer/:drawerId', { drawerId: '@id'}); 

    function drawerFactory(options) { 
     var defaults = { 
      socks: [], 
      timesOpened: 0 
     }; 
     options = angular.extend(defaults, options || {}); 
     return new Drawer(options); 
    } 

    return { 
     Drawer: Drawer, 
     create: drawerFactory 
    }; 
}); 

這將允許您創建一個新的抽屜,像這樣:

//New drawer with defaults 
var newDrawer = drawerService.create(); 
//New drawer with defaults and some other initialization 
var anotherDrawer = drawerService.create({material: 'plastic'}); 

它仍然不理想,但它是稍微乾淨而我卻是最邪惡的方式想想完成你正在努力完成的事情。

+0

嘿@ kanzelm3,很抱歉不能來這裏早。所以你的回答是我發佈的改進和更清晰的版本:)我喜歡它,但我會留下一點時間,以防萬一其他想法進來。如果不是,我會將你的答案標記爲正確的一個!非常感謝你! –

0

我最近遇到了這個問題,這是Google發佈的第一篇文章......答案提供了工作,但它非常混亂,並且改變了您必須與$ resource對象進行交互的方式。還有一個更簡單的方法:)

angular.module('app').factory('drawerService', function() { 
    var drawer = $resource('/drawer/:drawerId', { drawerId: '@id'}); 

    drawer.prototype.socks = []; 
    drawer.prototype.timesOpened = 0; 

    return drawer; 
} 

然後你只需創建一個默認的新對象,如下所示:

var drawer = new drawerService(); 

而且你還可以通過在自己的PARAMS這裏太.. 。

var drawer = new drawerService({ material: 'plastic' }); 

希望這可以幫助別人的未來:d

+0

這不起作用。原型成員將是「靜態」的,即在所有實例中共享。只能用於功能。 –