我有一个角度文件(服务文件)。我正在从中导出变量,并在其他文件(component.ts)中使用它。
当我在类外部访问其值时,它工作正常,但是当我在组件类中的任何函数声明中使用它时,它显示未定义的变量。
每个模块都有自己的作用域,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();
}
}
答案 0 :(得分:1)
这是不可能的,因为在模块外部,变量被视为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
,而不必显式导入。
您使用的方法似乎不正确(除非您还有其他事情要做,并且您没有在问题中提到)