Angular 提供者服务需要初始化函数 运行 一次
Angular provider service needs init function to be run once
我正在创建一个 angular 提供程序(因为它需要是可配置的)并且我需要它在应用程序启动时初始化一次,所以我在我的提供程序的 $get 函数中有一个 init() 函数它不会作为 public 的一部分返回。 init() 函数还将调整大小事件附加到 window。这是一个非常简化的版本...
angular.module('my.services').provider('breakpoints', function(){
var breakpoints = [];
var currentBreakpoint = {};
init();
return({
$get: instantiate
});
function instantiate($rootScope, $window) {
_initService();
// Public API
return({
current: current,
});
function current() {
return currentBreakpoint;
}
function _windowWidthChanged(){
// Check if breakpoint has changed and broadcast event if it has
}
function _initService(){
angular.element($window).bind('resize', _windowWidthChanged);
_windowWidthChanged();
}
}
});
我的问题是,这个 initService() 什么时候起作用 运行?
我知道如果我不将它注入任何 controllers/directives 等,它就不是 运行,即使它是注入我的应用程序的模块的一部分。我知道这一点是因为我在函数中放入了 console.log()。
如果我将服务注入到需要它的指令中,我知道页面加载时的函数 运行s,这正是我想要的,但是每次注入时它都会 运行进入不同的指令?如果是这样,那么我将获得附加到 window 的多个事件,并且它会在断点更改时 $broadcast 多个事件,这反过来会触发我所有的指令重新布局,这将是一场噩梦。
基本上我希望服务在第一次使用时初始化一次。将单个调整大小事件附加到 window 并在断点更改时广播单个事件。
您的服务将在首次注入时实例化一次。
来自Angular documentation on providers:
All services in Angular are singletons. That means that the injector
uses each recipe at most once to create the object. The injector then
caches the reference for all future needs.
实际的实例化顺序取决于不同作用域之间的依赖关系。 Angular 对依赖项进行排序,以便在使用它们的代码之前实例化所需的依赖项。顺便说一句,这就是 Angular 检测提供程序依赖性循环的方式。
我正在创建一个 angular 提供程序(因为它需要是可配置的)并且我需要它在应用程序启动时初始化一次,所以我在我的提供程序的 $get 函数中有一个 init() 函数它不会作为 public 的一部分返回。 init() 函数还将调整大小事件附加到 window。这是一个非常简化的版本...
angular.module('my.services').provider('breakpoints', function(){
var breakpoints = [];
var currentBreakpoint = {};
init();
return({
$get: instantiate
});
function instantiate($rootScope, $window) {
_initService();
// Public API
return({
current: current,
});
function current() {
return currentBreakpoint;
}
function _windowWidthChanged(){
// Check if breakpoint has changed and broadcast event if it has
}
function _initService(){
angular.element($window).bind('resize', _windowWidthChanged);
_windowWidthChanged();
}
}
});
我的问题是,这个 initService() 什么时候起作用 运行?
我知道如果我不将它注入任何 controllers/directives 等,它就不是 运行,即使它是注入我的应用程序的模块的一部分。我知道这一点是因为我在函数中放入了 console.log()。
如果我将服务注入到需要它的指令中,我知道页面加载时的函数 运行s,这正是我想要的,但是每次注入时它都会 运行进入不同的指令?如果是这样,那么我将获得附加到 window 的多个事件,并且它会在断点更改时 $broadcast 多个事件,这反过来会触发我所有的指令重新布局,这将是一场噩梦。
基本上我希望服务在第一次使用时初始化一次。将单个调整大小事件附加到 window 并在断点更改时广播单个事件。
您的服务将在首次注入时实例化一次。
来自Angular documentation on providers:
All services in Angular are singletons. That means that the injector uses each recipe at most once to create the object. The injector then caches the reference for all future needs.
实际的实例化顺序取决于不同作用域之间的依赖关系。 Angular 对依赖项进行排序,以便在使用它们的代码之前实例化所需的依赖项。顺便说一句,这就是 Angular 检测提供程序依赖性循环的方式。