首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在angularjs中覆盖依赖对象原型

在angularjs中覆盖依赖对象原型
EN

Stack Overflow用户
提问于 2014-06-05 09:57:14
回答 1查看 927关注 0票数 0

我在一个文件中定义了一个名为“$resource”的模块中定义了一组角App.API,因为它是生成的,所以我无法触摸它。(使用loopback-angular,一种从服务器端模型定义生成角度$resource的工具)

让我们以Product依赖项为例,在应用程序的后面,我想重写它的原型,如下所示:

代码语言:javascript
运行
复制
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中访问NewModule函数,但不能在其他模块中访问。

问题:如何覆盖依赖对象原型并将其提供给其他模块?

我尝试用这种方式定义原型函数,认为Product原型将被修改。也许还不够早:

代码语言:javascript
运行
复制
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对象。

EN

回答 1

Stack Overflow用户

发布于 2014-06-05 11:46:41

实际上,我只是搞砸了依赖关系的定义/顺序。

我有三个文件:

  1. app.js用于模块App (依赖于模块App.API)
  2. 模块api.js App.API
  3. product.jsProduct原型

正如问题所述,我所做的是:

代码语言:javascript
运行
复制
// in product.js
module('App.API').run(['Product', function(Product) { ... }]);

// in app.js
var appModule = module('App', ['App.API']);

但是,App.API模块是在另一个文件中定义的,这有点混乱,因为您永远不知道哪个模块将首先加载,除非在js加载程序中处理并放松并行下载。

因此,我显式地指定了模块和依赖项,而牺牲了在我的应用程序中添加更多的依赖项来声明(但它可以工作并且更稳定):

代码语言:javascript
运行
复制
// 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提供者的任何地方使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24057077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档