![](/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.