gpt4 book ai didi

angularjs - 如何在 Angular JS 中声明一个不是服务但不会污染全局范围的对象?

转载 作者:行者123 更新时间:2023-12-02 04:43:28 27 4
gpt4 key购买 nike

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

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

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

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()。来自文档:

Register a value service with the $injector, such as a string, a number, an array, an object or a function. This is short for registering a service where its provider's $get property is a factory function that takes no arguments and returns the value service.

更新

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

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。)

关于angularjs - 如何在 Angular JS 中声明一个不是服务但不会污染全局范围的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20337545/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com