在Angular 5中访问组件中的javascript变量

Posted

技术标签:

【中文标题】在Angular 5中访问组件中的javascript变量【英文标题】:Access javascript variable in component in Angular 5 【发布时间】:2018-08-12 00:42:31 【问题描述】:

我的 Angular 应用程序中有一个 js 文件 data.js 。这个 js 文件中声明了一些变量,如下所示。

 var data = 'test'

现在我必须在我的组件 (app.component.ts) 中访问这些变量及其值。

我读过一些将它们声明为导出的地方,使它们成为模块,并且可以在任何地方访问,但我不确定如何做到这一点。

这是我的应用程序的结构。我在 assets->js 文件夹中有 data.js。我需要修改 app.component.ts 中的变量值。

我对 Angular 很陌生。这甚至可能吗?

【问题讨论】:

data 是全局变量吗? 请不要拒绝这个问题,因为我对 Angular 很陌生。 @user184994 是的。 【参考方案1】:

您希望变量成为 Component 类的成员,而不仅仅是在模块中的任何位置声明的变量。

如果这没有立即意义,您需要更仔细地查看一些基本的 Angular 代码示例。

此外,只要您使用 Angular 和 TypeScript,最好使用 letconst 声明变量。

【讨论】:

【参考方案2】:

有了资产中的文件,我猜你是在窗口上声明它。您需要将脚本包含在 index.html 中,然后通过 window.data 在组件内的窗口中访问它。除非您的用例要求,否则这并不是真正推荐的方法。您提到的模块方法是首选。

在您的 app.component.ts 旁边,创建一个名为 data.ts 的文件,其中包含:

export let data: string = 'data';

在您的 app.component.ts 中,使用以下命令导入:

import  data  from './data.ts';

如果您打算不改变该数据,请考虑改用 const 关键字(在 data.ts 中)。

目录结构

/app.component.ts
/data.ts
/...

编辑:显示全局方法

您需要在 Angular 应用程序的上下文之外包含您的脚本。如果您使用 Angular CLI 引导您的应用程序,您可以在 cli 配置文件中添加对它的引用。请参阅topic 上的此文档。

该文件将被包含在内,并可在窗口上的组件中访问。棘手的部分来自typing and the Window。示例可能如下所示。

class AppComponent extends Component 

     private data: string;
     constructor() 
       // Explicitly cast window as an any type.  Would be better to type this, but this should work for you.
       this.data = (<any>window).data;
            


【讨论】:

感谢您的回复。我知道不要使用全局变量,但我需要在我的情况下使用它。你能告诉我一个如何在 app.component.ts 中使用 window.data 的例子 如果我想使用由 3rd 方 javascript 库声明或使用的变量怎么办?比方说谷歌广告,要刷新或加载广告,我们必须使用 googletag 变量如何在角度组件中访问该变量?【参考方案3】:

(参考https://***.com/a/42682160)


首先您必须将脚本包含到您的src/index.html

重要的是上面的语句放在你的角度根组件标签之前 (&lt; root-component&gt;&lt; /root-component&gt;&lt; ion-app&gt;&lt; /ion-app&gt; 或类似的东西)

那么您可以简单地编写(例如在 app.component.ts ngOnInit 函数中)

let varFromJsFile = window["data"] // varFromJsFile = 'test'

【讨论】:

以上是关于在Angular 5中访问组件中的javascript变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular 1.5 中从父控制器访问组件方法

Angular 4:访问其他组件中的模板元素

Angular 5:从组件访问元素内部 html 以获取动态生成的元素

如何在 Angular 2 组件中访问全局变量

访问 Angular2 JavaScript ES5 组件中的元素

如何从 Angular 6 中的父组件访问子组件中的表单?