我是这个论坛的新手。尽管我对您的网站和互联网进行了广泛的研究,但我找不到我想要的东西。 我想用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);
}
};
}
答案 0 :(得分:1)
您的应用程序源文件使用Webpack之类的工具放在一起,并从TypeScript转换为某些版本的JavaScript。您的类及其属性都不会成为全局变量。全局变量是绑定到window
对象的变量。因此,如果您想创建一个,您必须执行类似
window.messageChat = something;
但如果你想把它用于除调试之外的其他任何事情,这可能不是一个好主意。