Javascript 在Angular 6/Typescript中声明全局变量
我有两个文件,Javascript 在Angular 6/Typescript中声明全局变量,javascript,angular,typescript,Javascript,Angular,Typescript,我有两个文件,'Drawer.ts'和'sidenav-open-close.component.ts'componenet 我需要在这两者之间共享一个变量,在'Drawer.ts'中可以选择更改它的值,'sidenav-open-close.component.ts'将相应地执行操作 我试着用这个方法- 并创建了一个名为globals.ts的文件,其中包含以下内容: 'use strict'; export var diffMode : boolean = false; 并将其作为myGlo
'Drawer.ts'
和'sidenav-open-close.component.ts'
componenet
我需要在这两者之间共享一个变量,在'Drawer.ts'
中可以选择更改它的值,'sidenav-open-close.component.ts'
将相应地执行操作
我试着用这个方法-
并创建了一个名为globals.ts的文件,其中包含以下内容:
'use strict';
export var diffMode : boolean = false;
并将其作为myGlobals从“./src/globals.ts”导入到两个文件中代码>
我设法读取了diffMode,但当试图通过'Drawer.ts'
进行设置时,出现以下错误:
ERROR TypeError: Cannot set property diffMode of [object Object] which has
only a getter
感谢您的帮助。对于TypeScript现在使用的JavaScript模块(也称为“ESM”,用于ECMAScript模块),导入是导出的只读视图,这就是为什么您不能从定义它的模块外部写入diffMode
如果需要从其他模块写入,可以公开函数以设置其值:
'use strict';
export var diffMode : boolean = false;
export function setDiffMode(flag: boolean) {
diffMode = flag;
}
…然后从另一个模块调用该函数,而不是直接向其写入
(在JavaScript中,但这并不重要)在plunker上(遗憾的是,堆栈片段不允许使用模块)
main.js
:
const handle = setInterval(() => {
const p = document.createElement("p");
p.appendChild(
document.createTextNode(`diffMode = ${diffMode}`)
);
document.body.appendChild(p);
}, 250);
setTimeout(() => {
clearInterval(handle);
}, 1000);
export var diffMode = false;
export function setDiffMode(flag) {
diffMode = flag;
}
import {diffMode, setDiffMode} from "./main.js";
setTimeout(() => {
setDiffMode(true);
}, 500);
othermod.js
:
const handle = setInterval(() => {
const p = document.createElement("p");
p.appendChild(
document.createTextNode(`diffMode = ${diffMode}`)
);
document.body.appendChild(p);
}, 250);
setTimeout(() => {
clearInterval(handle);
}, 1000);
export var diffMode = false;
export function setDiffMode(flag) {
diffMode = flag;
}
import {diffMode, setDiffMode} from "./main.js";
setTimeout(() => {
setDiffMode(true);
}, 500);
如果您运行它,您将看到othermod.js
对diffMode
所做的更改确实发生了,并被main.js
的代码观察到
旁注:模块始终处于严格模式,因此您不需要
“使用严格”命令在顶部,编码>在顶部。p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>W维维、h、h、h、h、h、y、y、y>0>p>p>p>0>0>0>p>p>p>0>0,对该地区的凯凯凯克克克克克克族,本本本本本本研究,该地区,该地区,该地区,该地区,该地区,该地区,本本本本研究研究,该地区,该地区,该地区,该地区,该地区,本本本研究,本研究研究,本本研究,本研究,本本研究,本研究,本研究,本研究,本研究,本研究,本研究,本研究,本研究,本研究,本研究,本研究,本研究,本研究,本研究,本研究,本研究,本研究,本研究,在本研究中,一个城市的城市,一个城市的城市,一个城市的城市,一个城市的城市,一个城市的城市,一个城市的城市,一个城市的城市,一个城市的城市,一个城市的城市,一个城市的,r,r,r,以及其他的城市的城市,r,r,以及其他的城市,r,r,r,r,以及其他的城市的城市,r,r,r,以及其他的城市的城市的一个城市,r,r,r,r,以及以及其他其他其他的城市的城市的城市,r,r,r,r,以及以及其他其他其他,r,r,以及以及其他其他其他的城市的城市的城市,以及以及以及以及以及其他其他的,以及以及其他,以及以及以及以及以及以及以及其他其他其他的一个,以及以及以及以及以及以及以及以及以及以及以及其他的一个,以及以及以及以及以及以及以及以及以及其他其他的,对对对对本本本本本本本本本本本本本?——。谢谢@t.J.Crowder!您是否只更改Drawer.ts中的值?sidenav-open-close.component.ts是Drawer.ts的孩子、兄弟姐妹还是父母?@KhaledShaaban-我相信他/她正试图通过以下方式来做到这一点。我现在正试图避免服务
。