在Angular 6 / Typescript中声明一个全局变量

时间:2019-03-05 16:30:12

标签: javascript angular typescript

我有两个文件,'Drawer.ts''sidenav-open-close.component.ts' componenet。

我需要在这两个变量之间共享一个变量,并可以选择在'Drawer.ts'中更改其值,而'sidenav-open-close.component.ts'会相应地起作用。

我尝试使用此方法- What is the best way to declare a global variable in Angular 2 / Typescript 并使用以下内容创建了一个名为globals.ts的文件:

'use strict';
export var diffMode : boolean = false;

,并使用import * as myGlobals from './src/globals.ts';

将其导入两个文件中

我设法读取diffMode,但是尝试通过'Drawer.ts'进行设置时,出现以下错误:

ERROR TypeError: Cannot set property diffMode of [object Object] which has 
only a getter

我们将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

使用TypeScript现在使用的JavaScript模块(也称为ECMAScript模块为“ ESM”),导入是导出的只读视图,这就是为什么您无法写入{{ 1}}的定义模块之外。

如果需要从其他模块写入数据,则可以公开一个函数来设置其值:

diffMode

...然后从另一个模块调用该函数,而不是直接写入该函数。

Live Example(在JavaScript中,但这没关系)在插件上(不幸的是,堆栈片段不允许使用模块)。

'use strict'; export var diffMode : boolean = false; export function setDiffMode(flag: boolean) { diffMode = flag; }

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; }

othermod.js

如果运行该代码,则会看到import {diffMode, setDiffMode} from "./main.js"; setTimeout(() => { setDiffMode(true); }, 500); othermod.js所做的更改确实发生了,并被diffMode的代码所观察到。


侧面说明:模块始终处于严格模式,因此您不需要顶部的main.js

相关问题