如何做:AngularJS服务或其他组件在模块加载时实例化
How-to: AngularJS Service or other component instantitate when module loads?
读者好,Angularistics,
我想知道如何创建一个服务、提供商或任何其他angular组件,当模块加载时,它会立即实例化一次。
。我有一个模块叫做'utils'我有一个应用模块叫做'myApp'这取决于'utils'
我在utils模块中有一个名为'intervalRegister'的服务,其中包含一个用于应用范围api轮询的注册方法。
当我们想要注册一个轮询时,我们必须每次都使用这个服务,但是当窗口失去焦点时,这个服务会智能地停止所有轮询,以避免不必要的网络流量。
目前这个'intervalRegister'是通过'utils'模块的运行方法实例化的,但我不认为这是最好的解决方案。
我认为将它添加到run方法中是可以的,但作为替代,您可以添加一个使用interval
服务的控制器。
这可能更好,因为您还可以在该控制器中添加轮询相关逻辑。
我不知道其他自动开始间隔的方法,我也没有在谷歌上看到过。
请看看下面的演示或在这个文件。
angular.module('demoApp', ['utils'])
.controller('pollController', PollController)
.controller('mainController', MainController);
angular.module('utils', [])
//.run(['intervalTimer', function(intervalTimer){}])
.service('intervalTimer', IntervalTimer)
function IntervalTimer($interval, $log) {
var self = this;
this.count = 0;
this.pollCallbacks = [];
this.addPoll = function(callback, scope) {
return self.pollCallbacks.push({
fn: callback,
scope: scope
});
};
this.timer = function() {
self.count++;
$log.log('hello from interval timer', self.count);
if (self.pollCallbacks.length > 0 ){
angular.forEach(self.pollCallbacks, function(callbackObj) {
//console.log(callbackObj.scope);
callbackObj.fn.call(callbackObj.scope);
});
}
};
$interval(this.timer, 1000);
}
function MainController() {
}
function PollController(intervalTimer, $log) {
var vm = this;
this.messages = '';
this.pollCounter = 0;
this.addPolling = function() {
var callbackObj = {
pollCounter: angular.copy(vm.pollCounter++),
fn: function() {
var msg = 'poll callback no. ' + this.pollCounter + ' called!'
$log.log('poll callback no. ' + this.pollCounter + ' called!');
vm.messages += 'poll callback no. '
+ this.pollCounter + ' called!' + ''r'n';
}
};
vm.pollCounter = intervalTimer.addPoll(callbackObj.fn, callbackObj);
};
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="demoApp" ng-controller="mainController as mainCtrl">
<div ng-controller="pollController as pollCtrl">
<button ng-click="pollCtrl.addPolling()">add poll</button>active polls: {{pollCtrl.pollCounter}} <pre ng-bind="pollCtrl.messages"></pre>
</div>
</div>
相关文章:
- 带有模块加载程序的Emscripten
- 使用Socket.io的异步模块加载(AMD)
- 角度模块加载错误
- NaCl中的模块加载进度事件,manifest_version=2,没有内联javascript
- 节点.js - 异步模块加载
- Angular2&SystemJS:在生成模块加载器时找不到模块
- 当作为 CommonJS 模块加载时,Angular 是否全局将自己分配给“window.angular”
- 杜兰达尔/要求:模块加载和执行
- 主干木偶:木偶.应用程序导致 Require.js 模块加载错误,“'错误:尚未为上下文加载模块名称'A
- 将库从节点模块加载到 nodeJS 中
- 道场模块加载一般
- 在JS模块加载的上下文中,什么是立即执行的工厂函数
- 如何将angularJS模块加载到应用程序中
- 角度模块加载失败
- require.js模块加载不正确
- 如何等待Angular模块加载
- SystemJS-ES6模块加载器-导入时层次结构过多
- 如何用oclazyload加载的外部模块加载Angular translate
- 运行从ecmascript 6模块加载的函数
- 了解 YUI 模块加载和附加