我在名为' App.API'的模块中定义了一组角度$resource
。在一个文件中我无法触摸,因为它是生成的。 (使用loopback-angular
,一种从服务器端模型定义生成角度$资源的工具)
让我们以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
实例上使用另一个模块中的Product
(使用App.API / Product作为依赖项)仍然会引发undefined is not a function
错误,即使在{{{ 1}}对象被正确注入。
答案 0 :(得分:0)
实际上,我只是搞砸了依赖关系定义/命令。
我有三个文件:
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
提供商的任何地方使用。