创建一个可以在我的控制台中使用的全局变量

时间:2017-08-09 08:30:57

标签: angular typescript rxjs

我是这个论坛的新手。尽管我对您的网站和互联网进行了广泛的研究,但我找不到我想要的东西。 我想用TypeScript和Angular 4创建一个全局变量,所以我可以在我的控制台上使用这个变量。

让我解释一下: 我创建了一个'MyGlobal'界面,在那里我创建了我的全局变量'message_chat':

import {ChatService} from "./chat-service/chat.service";

export interface MyGlobal {
   message_chat: ChatService;
}

我希望能够在我的'ChatService'服务中初始化此变量。我希望这个变量取'this'的值:

import { Injectable } from '@angular/core';
import { Subject, BehaviorSubject, Observable } from 'rxjs';
import { MessageService } from '../message/message.service';
import { MyGlobal } from '../my-global';

@Injectable()
export class ChatService implements MyGlobal {
  message_chat: ChatService;
    constructor(public threadService: ThreadService,
                public messageService: MessageService) {
     this.message_chat = this;
    } 
}

export const chatServiceInjectables: Array<any> = [
 ChatService
];

当我尝试在控制台中使用此变量时,出现此错误:

message_chat.openThread()

    VM140:1 Uncaught ReferenceError: message_chat is not defined
    at <anonymous>:1:1

感谢您的帮助:)

/////////////////////////////////////////////// ////////////////////////////////////////////////// ///

更新:

这是我的ChatService:

import { Injectable } from '@angular/core';
import { Subject, BehaviorSubject, Observable } from 'rxjs';
import { MyGlobal } from '../my-global';

@Injectable()
export class ChatService implements MyGlobal {

etiam_chat: ChatService;

constructor(public threadService: ThreadService,
      public messageService: MessageService) {
this.etiam_chat = this;
}


addNewMessage(objMessage: any) : void {
 this.threadService.getThreadFromSubscription(objMessage.id)
.subscribe ((thread: Thread) => {
  objMessage.thread = thread;
});

if (objMessage.thread != null) {
const newMessage = new Message(objMessage);
this.addMessage(newMessage);
}
else {
const newThread: Thread = new Thread(objMessage.id, 
objMessage.name);
objMessage.thread = newThread;
const newMessage = new Message(objMessage);
this.addMessage(newMessage);
  } 
 }
}

我应该在控制台中使用addNewMessage函数吗?

@Injectable()
export class ChatService implements MyGlobal {

etiam_chat: ChatService;

constructor(public threadService: ThreadService,
      public messageService: MessageService) {
this.etiam_chat = this;
this.addNewMessage(objMessage: any) : void => {
this.threadService.getThreadFromSubscription(objMessage.id)
.subscribe ((thread: Thread) => {
  objMessage.thread = thread;
});

 if (objMessage.thread != null) {
  const newMessage = new Message(objMessage);
  this.addMessage(newMessage);
  }
  else {
  const newThread: Thread = new Thread(objMessage.id, 
  objMessage.name);
  objMessage.thread = newThread;
  const newMessage = new Message(objMessage);
   this.addMessage(newMessage);
    }
   };
  }

1 个答案:

答案 0 :(得分:1)

您的应用程序源文件使用Webpack之类的工具放在一起,并从TypeScript转换为某些版本的JavaScript。您的类及其属性都不会成为全局变量。全局变量是绑定到window对象的变量。因此,如果您想创建一个,您必须执行类似

的操作
window.messageChat = something;

但如果你想把它用于除调试之外的其他任何事情,这可能不是一个好主意。

相关问题