![](/img/trans.png)
[英]How to inject third party dependencies into Directive controllers in Angularjs?
[英]Have AngularJS inject dependencies into objects like it already does for controllers
我正在使用AngularJS 1.0.2和jQuery 1.8.2,我试图让AngularJS将依赖项注入到对象中,就像它对控制器一样。 你可以在jsFiddle上找到一个基本的例子,在那里你会发现两个控制器( List
和NewItem
),一个对象( Item
)和一个带有服务的模块(分别命名为services
和communication
)。
我的问题是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) {
to var Item = function ($filter, name, price) {
也不会起作用,因为它不是AngularJS创建对象的人(如控制器的情况),是我。
那么,我如何让AngularJS为我创建对象,或者让它解决我需要的依赖?
像var item = angular.create(Item, $scope.name, $scope.price);
或var item = new Item(angular.inject("filter"), $scope.name, $scope.price);
我认为...
通过使用$ injector服务及其实例化(Type,locals)方法,可以要求AngularJS实例化您自己的对象(并将依赖项注入它们!)。
例如,给定一个这样的构造函数:
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个参数:
这是一个有效的jsFiddle (初始版本的简化版本)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.