0

$resource在单个文件中的一个名为“App.API”的模块中定义了一组角度,因为它是生成的,所以我无法触摸。(使用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
});

有用。

问题是,我有许多不同的文件,每个文件都包含模块,并且遇到了依赖注入问题:我可以访问getTitle内部的函数NewModule但不能访问其他模块内部的函数。

问题:如何覆盖依赖对象原型并使其可用于其他模块?

我试图以这种方式定义原型函数,认为Product原型会被修改。也许还不够早

module('App.API').run(['Product', function(Product) {
    Product.prototype.getTitle = function() {
        return 'Product name is ' + this.name;
    };
});

它不起作用:getTitle在实例上使用另一个模块(使用 App.API/Product 作为依赖项)Product仍然会引发undefined is not a function错误,即使Product对象被正确注入。

4

1 回答 1

0

实际上,我只是搞砸了依赖定义/订单。

我有三个文件:

  1. app.js对于模块App(依赖于模块App.API
  2. api.js对于模块App.API
  3. product.js包含Product原型

如问题所述,我正在做:

// 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提供者的任何地方都可用。

于 2014-06-05T11:46:41.557 回答