javascript - 从模块导出的变量在角度类的函数内部不可访问
问题描述
我在 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;
}
并在component
:
update(){
setB("Hero");
console.log(b)
this.user.setObservable();
}
话虽如此,我认为你做错了什么。是在b
里面UserService
,所以它可以用作this.user.b
而不是显式地导入它。
您使用的方法似乎不正确(除非您有更多事情要做并且您没有在问题中提到)
推荐阅读
- unity3d - 活跃的布娃娃角色仍然站在地上
- css - 在垫子树中将孩子与线连接到父母
- powershell - 如何查询有收件人的约会项目?
- javascript - Fetch() 函数导致资源被 CORS 阻塞
- go - 计算步数
- android - org.edx.mobile.util.images.ErrorUtils: org.edx.mobile.http.HttpStatusException: 响应{protocol=http/1.1, code=404, message=Not Found, url=}
- audio - 当信号过零时如何解码幅度调制?
- c++ - 与 SDK 10.15 一起使用时,MacOS 10.15 SDK 不会将 LC_VERSION_MIN_MACOSX 添加到二进制文件中
- reactjs - 组件丢失之前的状态
- tfs - 如何解决这个问题?,您是否缺少程序集参考