Angular.js Service Factory module..以函数形式返回内部代码
Angular.js Service Factory module...return inner code as a function?
我对angular.js真的很陌生。这是我写的第一个服务。它接受一个json对象并更新控制器的作用域。不过我有点困惑……我想我应该包装ssellistener的内部代码,并返回它作为一个函数,但我不确定我将如何写,为什么我需要返回它作为一个函数。
另外,如果我将此服务注入多个控制器,会增加事件侦听器吗?我只想要一个事件侦听器。
one@demo ~/cloudimageshare-monitoring/project/app/scripts $ cat services/sse_listen.js
angular.module('monitorApp')
.factory('sseListener', function () {
var source = new EventSource('/subscribe');
source.addEventListener('message', function(e) {
var result = JSON.parse(e.data);
event = Object.keys(result)[0];
switch(event) {
case "cpuResult":
cpuUpdate(result);
break;
}
});
}
one@demo ~/cloudimageshare-monitoring/project/app/scripts $ cat controllers/main.js
'use strict';
angular.module('monitorApp')
.controller('homeCtrl', function($scope, $location, $document) {
console.log("s");
});
angular.module('monitorApp')
.controller('cpuCtrl', function($scope) {
$scope.apiTimeStamp = "";
$scope.infoReceived = "";
$scope.last15 = "";
$scope.last5 = "";
$scope.lastMinute = "";
var cpuUpdate = function (result) {
$scope.$apply(function () {
$scope.apiTimeStamp = result.cpuResult.timestamp;
$scope.infoReceived = new Date();
$scope.last15 = result.cpuResult.metrics['1m'].data
$scope.last5 = result.cpuResult.metrics['5m'].data
$scope.lastMinute = result.cpuResult.metrics['15'].data
});
}
});
而不是直接调用cpuUpdate(我不清楚您的工厂如何获得对该函数的引用),最好使用$rootScope。$broadcast(eventName, data),并对控制器中的事件作出反应。此外,你应该从工厂返回一个对象,但因为你不需要在任何地方注入它,所以最好把它放在app.run中。以下是我认为你的代码应该如何与我提到的变化:
angular.module('monitorApp').
run(function ($rootScope) { //Inject the $rootScope
var source = new EventSource('/subscribe');
source.addEventListener('message', function(e) {
var result = JSON.parse(e.data);
event = Object.keys(result)[0];
switch(event) {
case "cpuResult":
// Broadcast the event with data
$rootScope.$broadcast('$cpuResult', result);
break;
}
});
}).
controller('cpuCtrl', function($scope)){
$scope.apiTimeStamp = "";
$scope.infoReceived = "";
$scope.last15 = "";
$scope.last5 = "";
$scope.lastMinute = "";
// Need to pass the event to cpuUpdate,
var cpuUpdate = function (e, result) {
$scope.$apply(function(){
$scope.apiTimeStamp = result.cpuResult.timestamp;
$scope.infoReceived = new Date();
$scope.last15 = result.cpuResult.metrics['1m'].data
$scope.last5 = result.cpuResult.metrics['5m'].data
$scope.lastMinute = result.cpuResult.metrics['15'].data
});
};
//Listen for the event, call cpuUpdate when caught
$scope.$on('$cpuResult', cpuUpdate);
});
相关文章:
- 如何侦察内部存根返回与西农
- 如何解决“;错误所请求的URL返回500-内部服务器错误”;
- 我对“;返回true"嵌套函数内部;t工作
- 函数参数在内部不可见,返回新的Promise(函数(resolve,reject).传递给被promise化的函数的
- this内部的值返回this.each(function(){})
- 将外部函数返回的id传递给内部函数
- 函数内部的函数vs函数返回JavaScript中的函数
- 有没有一种方法可以判断图像src是否在javascript内部返回null
- Javascript OOP-从函数返回一个值;s在对象内部's方法(嵌套函数)
- 使用从内部函数返回的异步数据对外部函数返回promise
- Javascript - 从数组中查找所有类,从类中获取并返回内部文本
- Kohana - 使用“.exec”正则表达式发布javascript代码返回内部错误
- PhoneGap安卓应用程序需要获取外部SD卡路径,但它只返回内部SD卡路径
- 如何在我的 标签中返回内部 HTML
- 从函数返回内部变量和直接返回值之间有区别吗?
- windows .crypto. signtext总是返回内部错误
- Angular.js Service Factory module..以函数形式返回内部代码
- 理解当父函数返回内部函数时javascript是如何工作的
- AJAX调用返回内部服务器错误.. NET MV3项目
- 返回内部和外部IP