Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从模块导出的变量在类的函数中不可访问_Javascript_Angular_Typescript_Import_Module - Fatal编程技术网

Javascript 从模块导出的变量在类的函数中不可访问

Javascript 从模块导出的变量在类的函数中不可访问,javascript,angular,typescript,import,module,Javascript,Angular,Typescript,Import,Module,我在angular中有一个文件(服务文件)。我正在从中导出一个变量,并在其他文件(component.ts)中使用它 当我在类外部访问它的值时,它工作正常,但当我在组件类内部的任何函数声明中使用它时,它显示的是未定义的变量 在angular中,每个模块都有自己的作用域,ts文件转换为js,类转换为函数。 所以根据我对javascript的理解,函数外的变量应该是可用的。 但是,当我将它赋给类外的某个声明变量时,它正在工作 我在哪里不了解这种行为 import {UserService ,

我在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();

  }
}

这是不可能的,因为在模块外部,变量被视为
const
。如果它是一个物体,比如

export let b = { name:  "shashank" };
你本来可以改变它的

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

export let b = "shashank";

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

组件中

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

尽管如此,我认为你做错了什么。
b
位于
UserService
内部,因此它可以用作
this.user.b
,而不是显式导入它


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

您可以显示代码吗?从“/services/user.service”导入{UserService,b};控制台日志(b);//工作//var t=b;工作@Component({selector:'app root',templateUrl:'./app.Component.html',styleURL:['./app.Component.css'],providers:[UserService]})导出类AppComponent实现DoCheck,AfterContentInit,AfterContentChecked{title='project';a:any=“joshi”;构造函数(私有vc:ViewContainerRef,私有用户:UserService){console.log(“parent constr”)}update(){//t=“changed”;working b=“changed”//not working this.user.setObservable();将其添加到有问题的格式中什么类型的变量是
b
?如何在
user.service
中声明它?导出变量b=“my value”这是一个非常基本的程序。我只是想了解angular的功能。在user.service中,我声明了export var b=“my value”.我不想采取变通办法,我想了解背后的原因this@user11561629:答案已包含它
,这是不可能的,因为在模块外部,变量被视为常量
。这是JS和TS的行为。@user11561629:创建模块时,其值在其他模块之间共享,其值由def共享不允许直接更改。您可以更改
对象的值的原因(如果共享)正如我所建议的,如果它是
TS
@user11561629中的一个对象,那么它与
更改const
的值是一样的。为什么你不使用
这个.user.b
?而不是导出
b
?角度服务是为同样的目的创建的,也是一种标准做法。我希望我已经回答了你的问题,我正在做gative编程,我知道什么是正确的方法,但我想理解为什么框架不允许这样做,好吧,我可以在我的函数中控制台'b',es6模块导出绑定。如果我导出对象,我可以编辑它的属性,更改也会反映在user.service中。正如您所说,它被视为常量,如果对象我不是更改对象引用但仅更改对象的属性