我想要實時監控用戶的設備是在線還是離線。 我基本上使用這個網站的信息:http://www.joshmorony.com/monitoring-online-and-offline-states-in-an-ionic-application/在離子應用程序中監控在線和離線狀態
我是「升級」的代碼了一下,但我仍然有問題接收實時網絡狀態的變化。在我的工廠裏有一個叫做startWatching()
的功能,它的功能非常好 - 隨時在工廠內部和我訪問它後第一次時間。
我的問題:如何實時訪問我的控制器內網絡狀態的變化?每當他的設備脫機時,我需要向用戶顯示一些信息。
我的控制器:
// ### News ###
var newsCtrl = function ($scope, $http, $ionicLoading, PostService, BookMarkService, ConnectivityMonitor) {
console.log('newsCtrl');
var showNews = false;
ConnectivityMonitor.startWatching().then(function(result) {
// promise
console.log('ConnectivityMonitor result: ', result);
showNews = result;
$scope.showNews = showNews;
console.log('showNews: ', showNews);
if(showNews) {
displayNews();
}
}, function(error) {
console.error(error);
});
function displayNews() {
// do some stuff
}
};
newsCtrl.$inject = ['$scope', '$http', '$ionicLoading', 'PostService', 'BookMarkService', 'ConnectivityMonitor'];
我廠:
// ### ConnectivityMonitor ###
var ConnectivityMonitor = function ($rootScope, $cordovaNetwork, $q) {
console.log('ConnectivityMonitor');
var monitorNow = {
isOnline: isOnline,
isOffline: isOffline,
startWatching: startWatching
};
var deferred = $q.defer();
function isOnline() {
if(ionic.Platform.isWebView()) {
deferred.resolve($cordovaNetwork.isOnline());
} else {
deferred.resolve(navigator.onLine);
}
return deferred.promise;
};
function isOffline() {
if(ionic.Platform.isWebView()) {
deferred.resolve(!$cordovaNetwork.isOnline());
} else {
deferred.resolve(!navigator.onLine);
}
return deferred.promise;
};
function startWatching() {
if(ionic.Platform.isWebView()){
$rootScope.$on('$cordovaNetwork:online', function(event, networkState) {
console.log("went online");
console.log("event: ", event);
console.log("networkState: ", networkState);
deferred.resolve($cordovaNetwork.isOnline());
});
$rootScope.$on('$cordovaNetwork:offline', function(event, networkState) {
console.log("went offline");
console.log("event: ", event);
console.log("networkState: ", networkState);
deferred.resolve(!$cordovaNetwork.isOnline());
});
}
else {
window.addEventListener("online", function(e) {
console.log("went online");
console.log("event: ", e);
deferred.resolve(navigator.onLine);
}, false);
window.addEventListener("offline", function(e) {
console.log("went offline");
console.log("event: ", e);
deferred.resolve(!navigator.onLine);
}, false);
}
return deferred.promise;
};
console.log('isOnline: ', monitorNow.isOnline());
console.log('isOffline: ', monitorNow.isOffline());
console.log('startWatching: ', monitorNow.startWatching());
return monitorNow;
};
ConnectivityMonitor.$inject = ['$rootScope', '$cordovaNetwork', '$q'];
你設法解決這個問題嗎?我有同樣的問題 – methuselah