首页 > 解决方案 > 从模块导出的变量在角度类的函数内部不可访问

问题描述

我在 angular 中有一个文件(服务文件)。我从中导出一个变量并在其他文件(component.ts)中使用它。

当我在类外访问它的值时,它工作正常,但是当我在组件类内声明的任何函数中使用它时,它显示变量未定义。

在 Angular 中,每个模块都有自己的作用域,ts 文件转换为 js,类转换为函数。所以根据我对javascript的理解,函数之外的变量应该是可用的。但是当我将它分配给类外的一些声明变量时,它正在工作。

我在哪里缺乏理解这种行为?

    import {UserService ,b} from './services/user.service';
    console.log(b);// working
    //var t=b; working

    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css'],
      providers:[UserService]
    })
    export class AppComponent implements DoCheck , AfterContentInit,AfterContentChecked {
      title = 'project';
      a:any="joshi";
      constructor(private vc: ViewContainerRef ,private user:UserService){
        console.log("parent constr")

      }
      update(){
        //t="changed";  working
        b="changed"  //not working
      this.user.setObservable();

  }
}

标签: javascriptangulartypescriptimportmodule

解决方案


这是不可能的,因为在模块之外,变量被视为const. 如果它是一个对象,比如

export let b = { name:  "shashank" };

你本来可以改变它。

一种解决方法可能是创建一个函数,该函数允许您从模块本身内部更改其值,例如:

export let b = "shashank";

export let setB = (value) => {
  b = value;
}

并在component

update(){
  setB("Hero");
  console.log(b)
  this.user.setObservable();
}

话虽如此,我认为你做错了什么。是在b里面UserService,所以它可以用作this.user.b而不是显式地导入它。

您使用的方法似乎不正确(除非您有更多事情要做并且您没有在问题中提到)


推荐阅读