Javascript 为什么从@Component';s装饰师-棱角4+;
我正在寻找在组件中有条件地加载样式的方法。 当我这样做时,我尝试了以下方法:Javascript 为什么从@Component';s装饰师-棱角4+;,javascript,angular,typescript,angular5,angular6,Javascript,Angular,Typescript,Angular5,Angular6,我正在寻找在组件中有条件地加载样式的方法。 当我这样做时,我尝试了以下方法: @Component({ selector:console.log('test',this)||'login-with-password', //logs: undefined templateUrl:'./login-with-password.html', styleUrls:['./login-with-password.css'], preserveWhitespaces:fal
@Component({
selector:console.log('test',this)||'login-with-password', //logs: undefined
templateUrl:'./login-with-password.html',
styleUrls:['./login-with-password.css'],
preserveWhitespaces:false
})
令我惊讶的是,这被记录为未定义。
我一直在想这怎么可能,因为this关键字应该总是指向某个东西,ether window或null
decorator在什么上下文中运行,而其上下文是未定义的?@Component是一个decorator,它只保存组件元数据,将一个角度类定义为组件 Window对象是浏览器窗口对象,请尝试在控制台中记录Window。log()在@component()内,它将记录Window对象 “this”关键字不一定总是指向某个东西。 在严格模式下,如果未设置“this”的值,则该值将未定义。 此关键字将仅保留对对象的引用。它包含调用函数的对象的值
ngOnInit()是在加载组件时第一次调用的方法,您可以通过console.log(这)找到调用ngOnInit()方法的对象的所有数据。“如果上下文未定义,装饰器在什么上下文中运行?”-你在提问之前读过这个问题吗?装饰程序是在严格模式下运行的,因此
这个
是未定义的。您尝试使用的技巧在AOT中不受支持,因此在Angular中这样做不是一个好主意。应该怎么做取决于你想要达到什么。如果你有兴趣解决它,考虑再问你的情况解释的问题。