我正在使用 AngularJS 1.0.2 与 jQuery 1.8.2 并且我正在尝试让 AngularJS 将依赖项注入(inject)对象,就像它对 Controller 所做的那样。您可以在 jsFiddle 上找到一个基本示例,在那里你会发现两个 Controller (List
和 NewItem
),一个对象(Item
)和一个带有服务的模块(名为 服务
和通信
)。
我的问题是 Item
:
var Item = function (name, price) {
var self = this;
self.name = name;
self.price = price;
self.pretty = function () {
return self.name + ": " + self.price;
};
};
在其中我需要使用一些外部的东西,假设我想要 pretty
方法将 price
属性格式化为货币感知字符串:
self.pretty = function () {
return self.name + ": " + $filter("currency")(self.price);
};
但这行不通,因为 $filter
没有定义。 (请注意,$filter
的用法只是一个例子,它可以是任何东西。)
并且将 var Item = function (name, price) {
修改为 var Item = function ($filter, name, price) {
也不起作用,因为创建对象的不是 AngularJS(在 Controller 的情况下),而是我。
那么,我怎样才能让 AngularJS 为我创建对象,或者让它解决我需要的依赖关系?
类似于 var item = angular.create(Item, $scope.name, $scope.price);
或 var item = new Item(angular.inject("filter") , $scope.name, $scope.price);
我想...
最佳答案
通过使用 $injector 可以要求 AngularJS 实例化您自己的对象(并向它们注入(inject)依赖项!)服务及其instantiate(Type, locals)方法。
例如,给定这样的构造函数:
var Item = function ($filter, name, price) {
var self = this;
self.name = name;
self.price = price;
self.pretty = function () {
return $filter('json')(self);
};
};
可以像这样创建一个 Item
的实例:
var item = $injector.instantiate(Item, { name: $scope.name, price: $scope.price });
请注意,instantiate
方法接受 2 个参数:
- 类型:构造函数。
- locals:值的散列值不应不注入(inject),而是按原样使用。
这是一个working jsFiddle (初始版本的简化版本)。
关于javascript - 让 AngularJS 将依赖项注入(inject)对象,就像它已经为 Controller 所做的那样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13395962/