我有两个文件,'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
我们将不胜感激,谢谢。
答案 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
。