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

标签 javascript angular typescript

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

我需要在这两者之间共享一个变量,并可以选择更改它在 '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

帮助将不胜感激,谢谢。

最佳答案

对于 TypeScript 现在使用的 JavaScript 模块(ECMAScript 模块的“ESM”),导入是导出的只读 View ,这就是为什么你不能写入 diffMode 来自其定义的模块外部。

如果你需要从不同的模块写入它,你可以公开一个函数来设置它的值:

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

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

Live Example (在 JavaScript 中,但没关系)在 plunker 上(遗憾的是,Stack Snippets 不允许使用模块)。

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.jsdiffMode 所做的更改确实发生并被 main.js 观察到> 的代码。


旁注:模块始终处于严格模式,因此您不需要顶部的 'use strict';

关于javascript - 在 Angular 6/Typescript 中声明一个全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55007402/

相关文章:

angular - Ng2 抛出 DirectiveNormalizer.normalizeLoadedTemplate 错误

angular - 使用 Karma 进行测试 - 无法绑定(bind)到 'routerLink',因为它不是的已知属性

typescript 3.5 : How to update object properties using indexer notation?

angular - 如何在模型中定义嵌套对象? (angular2/ typescript )

javascript - (Javascript) 如何根据下拉列表中的选定选项更改变量值?

json - Angular Json 管道类型错误 : Converting circular structure to JSON

javascript - 通过按钮关闭一个iframe类型的弹出模态窗口

angular - 如何删除 typescript 中的类

javascript - 曾经是标签的通用正则表达式

javascript - 如何在 Javascript 中返回计算的字符串表示形式