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