我在一个文件中定义了一个名为“$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
});
它起作用了。
问题是,我有许多不同的文件,每个文件都包含模块,而且我遇到了依赖注入问题:我可以在NewModule
中访问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
对象。
发布于 2014-06-05 11:46:41
实际上,我只是搞砸了依赖关系的定义/顺序。
我有三个文件:
app.js
用于模块App
(依赖于模块App.API
)api.js
App.API
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
提供者的任何地方使用。
https://stackoverflow.com/questions/24057077
复制相似问题