我正在制作这个模块,用于跟踪用户是否在线,因此我写了以下工厂
var app = angular.module('cskiwi.general-utilities', [])
.factory('cskiwiUtilities', function ($rootScope, $window) {
var networkInfo = function() {
// check if online
var online = $rootScope.online = window.navigator.onLine;
$window.addEventListener("offline", function() {
$rootScope.$apply(function() {
online = $rootScope.online = false;
});
}, false);
$window.addEventListener("online", function() {
$rootScope.$apply(function() {
online = $rootScope.online = true;
});
}, false);
// update changes
$rootScope.$watch('online', function(newStatus) {
$rootScope.$broadcast('onlineUpdate', newStatus);
});
return { online: online };
};
//public methods & properties
var self = {
networkInfo: networkInfo
};
return self;
});
现在我可以执行以下操作:$scope.networkInfo = cskiwiUtilities.networkInfo();
这样可行,但如果连接断开或重新连接,则不会更新$scope.networkinfo
。我可以听广播,但我想我可以放弃广播部分
答案 0 :(得分:1)
您可以简单地观看cskiwiUtilities.networkInfo()
调用,以便在值更改时更新范围属性:
$scope.$watch(function() {
return cskiwiUtilities.networkInfo();
}, function(networkInfo) {
$scope.networkInfo = networkInfo;
})
根据您的需求和用途,您可能还希望在任何地方都可以访问这些信息,方法是在服务中的$ rootScope上进行设置:
$rootScope.$watch('online', function(newStatus) {
$rootScope.$broadcast('onlineUpdate', newStatus);
$rootScope.networkInfo = newStatus;
});
然后,可以在应用程序的任何非隔离部分(范围)访问“networkInfo”道具。