繁体   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