Trong ứng dụng AngularJS của tôi, tôi có một dịch vụ dựa trên WebSocket. Nếu kết nối WebSocket bị hỏng, tôi muốn hoàn toàn 'khởi động lại' ứng dụng (đi tới trang mặc định từ $ route, tạo lại dịch vụ, v.v.). Điều đó có thể đạt được không? Đây là cách tôi bắt đầu, nhưng từ thời điểm đó tôi không có ý tưởng làm thế nào để tiến hành:Cách 'khởi động lại' ứng dụng angularjs
Module:
(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'
});
}]);
}());
dịch vụ:
(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);
};
}]);
}());
Bộ điều khiển:
(function() {
var app = angular.module('mainModule');
app.controller('appController', ['$route', '$scope', '$wsService', function ($route, $scope, $wsService) {
$wsService.isConnected = function (m) {
//restart logic
};
}]);
}());
Vì vậy, như 'logic khởi động lại' của tôi, tôi đã thử "$ route.reload();" nhưng như bạn đã biết nó không làm những gì tôi cần. Cuối cùng tôi sẽ có một thông điệp cảnh báo bật lên (bootstrap phương thức) thông báo cho người dùng rằng kết nối đã bị mất, và trên một nút bấm trong phương thức đó, nó sẽ tải lại ứng dụng và đi đến/home. Tôi không hỏi làm thế nào để làm điều đó popup vv như thế này đã được thực hiện. Tuy nhiên, bây giờ, tôi chỉ cần tìm ra logic để tải lại toàn bộ ứng dụng. Bất kỳ ý tưởng? Cảm ơn.
Tôi chắc chắn có những câu trả lời tốt hơn, nhưng tôi thực sự đã gặp vấn đề này với 'ui-router' ở độ phân giải được đề xuất không hoạt động đúng với tôi (nó chỉ tải lại bộ điều khiển lượt xem) Vì vậy, tôi đã phải nghỉ mát để javascript tinh khiết, lần đầu tiên kiểm tra '$ vị trí. $$ absUrl', nếu trên" trang bắt đầu "tôi chỉ cần làm một' location.reload() ', khác tôi chỉ' window.location = '/ home ''. – jnthnjns
Tại sao phải tải lại toàn bộ ứng dụng? Sẽ không kết nối lại đủ? –
Tôi có một số trạng thái được lưu trong ứng dụng và cũng như kết nối lại tôi muốn đặt lại trạng thái đó. Thay vì thay đổi 20 biến phạm vi thành giá trị mặc định, tôi có thể khởi động lại toàn bộ ứng dụng. Tôi biết nó không phải là cách tốt nhất, nhưng sẽ phải làm ngay bây giờ. –