Dan*_*zyk 17 javascript angularjs
在我的AngularJS应用程序中,我有一个基于WebSocket的服务.如果WebSocket连接断开,我想完全"重启"应用程序(从$ route转到默认页面,重新创建服务等).这可以实现吗?这就是我的开始,但从那时起我不知道如何继续:
模块:
(function () {
angular.module('mainModule', ['ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
$routeProvider.
when('/home', {
templateUrl: 'partials/home.html',
controller: 'appController'
}).
when('/register', {
templateUrl: 'partials/register.html',
controller: 'appController'
}).
otherwise({
redirectTo: '/home'
});
}]);
}());
Run Code Online (Sandbox Code Playgroud)
服务:
(function () {
var app = angular.module('mainModule');
app.service('$wsService', ['$q', '$window', function ($q, $window) {
$window.console.log("WebSocket SERVICE: started");
var self = this;
var ws = new WebSocket("ws://127.0.0.1:9090");
this.isConnected = function (m) {};
ws.onopen = function () {
$window.console.log("WebSocket SERVICE: connected");
self.isConnected(true);
};
ws.onmessage = function (m) {
//do whatever I want to do
};
ws.onerror = function () {
$window.console.log("WebSocket SERVICE: disconnected");
self.isConnected(false);
};
}]);
}());
Run Code Online (Sandbox Code Playgroud)
控制器:
(function () {
var app = angular.module('mainModule');
app.controller('appController', ['$route', '$scope', '$wsService', function ($route, $scope, $wsService) {
$wsService.isConnected = function (m) {
//restart logic
};
}]);
}());
Run Code Online (Sandbox Code Playgroud)
所以当我'重启逻辑'时,我尝试了"$ route.reload();" 但正如你已经知道它不能做我需要的.最终我会弹出一个警告消息(bootstrap modal)通知用户连接已经丢失,并且在该模式中点击一个按钮,它将重新加载应用程序并转到/ home.我不是在问这个弹出窗口是怎么做的,因为这已经完成了.然而,至于现在,我需要弄清楚应用程序的总重新加载的逻辑.有任何想法吗?谢谢.
Dan*_*zyk 32
通过反复试验来回答我自己的问题:
$scope.$apply(function() {
$location.path('/home');
$window.location.reload();
});
Run Code Online (Sandbox Code Playgroud)
这将转到/ home(默认)并重新加载所有内容,从而创建新的服务,模块,控制器等.如果有更好的方法(如果我在模块中将默认路径更改为/ blah,则不会选它,因此我将不得不编辑此代码),让我知道:)
| 归档时间: |
|
| 查看次数: |
23844 次 |
| 最近记录: |