Alb*_*reo 6 javascript dependency-injection angularjs
我正在使用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;
};
};
Run Code Online (Sandbox Code Playgroud)
在其中我需要使用外部的一些东西,假设我希望该pretty方法将price属性格式化为货币识别字符串:
self.pretty = function () {
return self.name + ": " + $filter("currency")(self.price);
};
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为$filter没有定义.(请注意,使用$filter只是一个例子,它可以是任何东西.)
并且修改var Item = function (name, price) {为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);我想......
pko*_*rce 16
通过使用$ 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);
};
};
Run Code Online (Sandbox Code Playgroud)
可以创建一个Item像这样的实例:
var item = $injector.instantiate(Item, { name: $scope.name, price: $scope.price });
Run Code Online (Sandbox Code Playgroud)
请注意,该instantiate方法接受2个参数:
这是一个有效的jsFiddle(初始版本的简化版本).
| 归档时间: |
|
| 查看次数: |
3859 次 |
| 最近记录: |