Как перезапустить приложение 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'
            });
        }]);
}());

Услуги:

(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);
        };

    }]);
}());

Контроллер:

(function () {

    var app = angular.module('mainModule');

    app.controller('appController', ['$route', '$scope', '$wsService', function ($route, $scope, $wsService) {

        $wsService.isConnected = function (m) {
            //restart logic
        };
    }]);
}());

Так как моя "логика перезапуска" я попробовал "$ route.reload();" но, как вы уже знаете, он не делает то, что мне нужно. В конце концов у меня появится всплывающее предупреждающее сообщение (bootstrap modal), информирующее пользователя о том, что соединение потеряно, и нажатие кнопки в этом модале перезагрузит приложение и перейдет в /home. Я не спрашиваю, как сделать это всплывающее окно и т.д., Поскольку это уже сделано. На данный момент, однако, мне нужно выяснить только логику полной перезагрузки приложения. Есть идеи? Спасибо.

Ответы

Ответ 1

Чтобы ответить на мой собственный вопрос, достигнутый с проб и ошибок:

$scope.$apply(function() {
    $location.path('/home');
    $window.location.reload();
});

Это приведет к /home (по умолчанию) и перезагрузит все, создав тем самым новый сервис, модуль, контроллеры и т.д. Если есть лучший способ сделать это (если я изменю путь по умолчанию к /blah в моем модуле, это выиграет 't поднять его и, следовательно, мне придется отредактировать этот код тоже), дайте мне знать:)

Ответ 2

Я сделал то же самое:

$window.location.href = '/home';

Ответ 3

Небольшая настройка, которую я сделал с вашим ответом, который очень помог с обновлением пользовательского интерфейса. Является ли изменение пути внутри обратного вызова успешной перезагрузки:

$window.location.reload().then( function success(){ $location.path('/home'); }, function error(error) {} );

В большинстве случаев он дает очень плавный переход, предполагая, что вы перезагружаетесь при переадресации на другую страницу.