2

从那以后,我发现我可以通过在我的工厂中使用 get() 方法来返回对象的实例,该方法返回新的服务实例。

但是如果我的对象不是服务(这里讨论语义)怎么办。EG 我有一个页面上有很多图表,图表对象(下)不是(语义上的)服务。

那么我是否必须使用诸如工厂/提供者/等模式之类的东西来声明它?感觉不对,因为它实际上不是服务。但是我需要从我的控制器中引用它,所以它需要被注入,或者以某种方式访问​​。&我不希望它污染全球范围。

var Chart = function () {
    var self = this;
    this.initialize = function (name, clientMethod, usingDateRange, usesAnalytics, initCB, serviceCB, highchartsConfig) {

        this.name = name;
        this.clientMethod = clientMethod;
        this.usingDateRange = usingDateRange;
        this.usesAnalytics = usesAnalytics;
        this.initCB = initCB;
        this.serviceCB = serviceCB;
        this.highchartsConfig = highchartsConfig;

        this.$chart = $('#' + name);
        this.isIncluded = false;

        this.highchartsConfig.chart.renderTo = this.name;

        this.initCB && this.initCB(this);
    };
};
4

1 回答 1

5

module.value()。来自文档:

使用 $injector 注册一个值服务,例如字符串、数字、数组、对象或函数。这是注册服务的缩写,其中提供者的 $get 属性是一个工厂函数,不接受任何参数并返回值服务。

更新

不确定您是否仍然对此感兴趣,但我终于找到了您问题的正确答案 - 使用该$controller服务。这里我创建了一个简单的演示:

app.controller('MainCtrl', function($scope, $controller) {

  function Person($interpolate, name, surname){
    var greetStr = "Hello {{name + ' ' + surname}}!";
    var greetExp = $interpolate(greetStr);
    this.greet = greetExp({name:name, surname:surname});
  }

  $scope.person1 = $controller(Person, {name:"Jack", surname:"Daniels"});
  $scope.person2 = $controller(Person, {name:"Johny", surname:"Walker"});
});

(我过去$interpolate 只是为了表明 Angular 的 DI 会自动解析它知道的任何依赖项。其余的依赖项 [locals] 可以作为第二个参数传递给$controller.)

于 2013-12-02T20:54:09.810 回答