6

AngularJS1.0.2とjQuery1.8.2を使用しており、コントローラーの場合と同様に、AngularJSに依存関係をオブジェクトに注入させようとしています。jsFiddleの基本的な例を見つけることができます。そこには、2つのコントローラー(ListNewItem)、オブジェクト(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は単なる例であり、何でもかまいません。)

また、オブジェクトを作成しているのはAngularJSではないため(コントローラーの場合のように)、に変更しても機能しません。それは私ですvar Item = function (name, price) {var Item = function ($filter, name, price) {

では、どうすればAngularJSにオブジェクトを作成させることができますか、または必要な依存関係を解決させることができますか?

のようなものvar item = angular.create(Item, $scope.name, $scope.price);か、var item = new Item(angular.inject("filter"), $scope.name, $scope.price);私は思う...

4

1 に答える 1

16

$ injectorサービスとそのinstantiate(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(最初のものの簡略化されたバージョン)です。

于 2012-11-15T18:49:57.363 に答える