簡體   English   中英

讓AngularJS將依賴項注入對象,就像它已經為控制器做的那樣

[英]Have AngularJS inject dependencies into objects like it already does for controllers

我正在使用AngularJS 1.0.2和jQuery 1.8.2,我試圖讓AngularJS將依賴項注入到對象中,就像它對控制器一樣。 你可以在jsFiddle上找到一個基本的例子,在那里你會發現兩個控制器( ListNewItem ),一個對象( Item )和一個帶有服務的模塊(分別命名為servicescommunication )。

我的問題是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個參數:

  • 類型:構造函數。
  • locals: 應該注入但是按原樣使用的值的哈希值。

這是一個有效的jsFiddle (初始版本的簡化版本)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM