[英]Override dependency object prototype in angularjs
我在單個文件中的名為“ App.API”的模塊中定義了一組有角度的$resource
,由於生成該文件,因此無法觸摸。 (使用loopback-angular
,該工具可從服務器端模型定義生成角度$ resource)
讓我們以Product
依賴為例,稍后在應用程序中,我想覆蓋其原型,如下所示:
module('App.NewModule', ['App.API']).run(['Product', function(Product) {
Product.prototype.getTitle = function() {
return 'Product name is ' + this.name;
};
// From now on I can use p.getTitle() on every Product $resource
});
有用。
問題是,我有許多不同的文件,每個文件都包含模塊,並且遇到了依賴注入問題:我可以在NewModule
內訪問getTitle
函數, 但不能在其他模塊內訪問。
問題:如何覆蓋依賴對象原型並將其提供給其他模塊?
我試圖以這種方式定義原型函數,以為可以修改Product
原型。 也許還不夠早 :
module('App.API').run(['Product', function(Product) {
Product.prototype.getTitle = function() {
return 'Product name is ' + this.name;
};
});
它不起作用:在Product
實例上的另一個模塊中使用getTitle
(使用App.API / Product作為依賴)仍然拋出undefined is not a function
錯誤,即使Product
對象已正確注入。
實際上,我只是弄亂了依賴項定義/順序。
我有三個文件:
App
app.js
(取決於模塊App.API
) api.js
模塊的App.API
Product
原型的product.js
如問題所述,我在做:
// in product.js
module('App.API').run(['Product', function(Product) { ... }]);
// in app.js
var appModule = module('App', ['App.API']);
但是App.API
模塊是在另一個文件中定義的,這有點混亂,因為除非您在js加載器中進行處理並失去並行下載功能,否則您永遠無法確定哪個會首先加載。
因此,我明確指定了模塊和依賴項,但以在應用程序中添加更多要聲明的依賴項為代價(但它有效且更穩定):
// in product.js
module('ApiProduct', ['App.API']).run(['Product', function(Product) { ... }]);
// in app.js
var appModule = module('App', ['App.API', 'ApiProduct']);
注意:在我的第一次嘗試中,我在.config()
塊中的新模塊中定義了原型,但由於無法加載App.API
服務,因此無法正常工作。 隨着.run()
它的工作原理和我getTitle
原型是隨處可見,我需要Product
供應商。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.