Angularjs 如何在Angular JS中声明非';不是服务,但不';不要污染全球范围?

Angularjs 如何在Angular JS中声明非';不是服务,但不';不要污染全球范围?,angularjs,angular-services,Angularjs,Angular Services,我发现我可以通过在工厂中使用get()方法返回对象的实例,该方法返回新的服务实例 但是,如果我的对象不是服务(这里讲语义),该怎么办。例如,我有一个有很多图表的页面,下面的图表对象(语义上)不是一个服务 那么,我是否必须使用类似工厂/提供者/等模式来声明它?这感觉不对,因为它实际上不是一项服务。但是我需要从我的控制器引用它,所以它需要被注入,或者以某种方式访问我不希望它污染全球范围 var Chart = function () { var self = this; this.i

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

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

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

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);
    };
};
查看
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将自动解析它所知道的任何依赖项。其余依赖项[局部变量]可以作为第二个参数传递给
$controller

@Baconbeastnz是的,的确如此。我需要一个非单例。但在任何情况下,这样说是否正确,(使用angular时)写入的任何自定义对象都应该在这些值/工厂服务中声明?不管语义是什么?(只是看起来语义不直观?