簡體   English   中英

覆蓋angularjs中的依賴對象原型

[英]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對象已正確注入。

實際上,我只是弄亂了依賴項定義/順序。

我有三個文件:

  1. 適用於模塊App app.js (取決於模塊App.API
  2. api.js模塊的App.API
  3. 包含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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM