Angularjs 1.4.4:未捕获引用错误:$rootScope未定义

Angularjs 1.4.4:未捕获引用错误:$rootScope未定义,angularjs,angularjs-scope,angularjs-controller,sockjs,Angularjs,Angularjs Scope,Angularjs Controller,Sockjs,我想使用SockJs从服务器端接收stomp发布的所有事件。我已经创建了WebSocketController。它在app.js中作为 .controller('webSocketController',webSocketController) WebSocketController.js class WebSocketController { constructor($rootScope, $scope) { Object.assign(this, {$rootScope, $sc

我想使用SockJs从服务器端接收stomp发布的所有事件。我已经创建了WebSocketController。它在app.js中作为

.controller('webSocketController',webSocketController)

WebSocketController.js

class WebSocketController {

  constructor($rootScope, $scope) {
   Object.assign(this, {$rootScope, $scope});
    this.onConnected = this.onConnected.bind(this);
    this.stompClient = '';
    let vm = this;

    setTimeout(function () {
            vm.connect();
    }, 2000);
  }

  onConnected(frame) {
    console.log('Connected: ' + frame);
    this.stompClient.subscribe('/topic/public', this.showMessage);
  }

  onError(error) {
      console.log("Could not connect to WebSocket server. Please refresh this page to try again!");
      console.log("error: ", error);
  }

  connect() {
    var socket = new SockJS('/ws');
    this.stompClient = Stomp.over(socket);
    this.stompClient.connect({}, this.onConnected, this.onError);
  }

  showMessage(message) {
      console.log("message received: ",message);
      $rootScope.$broadcast('refreshAccessPointList');
  }

  getStompClient() {
    return this.stompClient;
  }

}

var MyController = new WebSocketController();
MyController.$inject = ['$scope', '$rootScope'];
export default MyController;
当showMessage()尝试广播接收到的事件时,它找不到$rootScope。 控制台显示:uncaughtreferenceerror:$rootScope未在l处定义(webSocket.controller.js?eaab:33)
知道我遗漏了什么吗?

在创建控制器实例之前,应该设置$inject注释

WebSocketController.$inject = ['$rootScope', '$scope'];
export class WebSocketController;
另外,我认为您不需要手动创建WebSocketController的实例

someModule.controller('WebSocketController', WebSocketController);

类之后,将依赖项注入控制器类,然后注入模块

export class WebSocketController {

  constructor($rootScope, $scope) {
   Object.assign(this, {$rootScope, $scope});
    this.onConnected = this.onConnected.bind(this);
    this.stompClient = '';
    let vm = this;

   ....
   ....
   ....


  getStompClient() {
    return this.stompClient;
  }

}
现在,

将依赖项注入控制器类:

WebSocketController.$inject=['$rootScope','$scope']

将控制器依赖项注入模块:


angular.module('app').controller('WebSocketController',WebSocketController)

WebSocketController的依赖项注入将在WebSocketController.js中完成,而控制器依赖项的注入将在app.js中完成。如何确定注入顺序的优先级?不要初始化新对象,而是尝试直接导出类,或者,如果不只是像我在回答中所说的那样,在同一个文件中添加模块依赖项