我一直认为TypeScript中的装饰器是在类的构造函数之后调用的.但是,我被告知,例如,这篇文章的最高答案声称在声明类时调用Decorator,而不是在实例化对象时调用.我注册的Angular课程的Udemy讲师也告诉我,Typescript中的装饰器在属性初始化之前运行.
但是,我在这个问题上的实验似乎表明不是这样.例如,这是一个带有属性绑定的简单Angular代码:
test.component.ts
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-test',
template: '{{testString}}'
})
export class TestComponent{
@Input() testString:string ="default string";
constructor() {
console.log(this.testString);
}
}
Run Code Online (Sandbox Code Playgroud)
app.component.html
<app-test testString="altered string"></app-test>
Run Code Online (Sandbox Code Playgroud)
当我执行代码时,控制台记录"默认字符串"而不是"更改字符串".这证明了在类的构造函数执行后调用decorator.
有人可以给我一个明确的答案,说明何时调用装饰器?因为我在网上的研究与我做的实验相矛盾.谢谢!
这是我的 html 的一部分:
<div class="container">
Run Code Online (Sandbox Code Playgroud)
这是相关的 CSS 部分:
.container{
width:100%;
height: 45px;}
@media (min-width: 768px) {
.container{
height:60px;}
Run Code Online (Sandbox Code Playgroud)
现在我想通过 ngStyle 将这个 div 的样式绑定到一个属性。我在 app.component.ts 中有一个名为 的属性isShrinked,当 时isShrinked===true,我希望 div 的高度为 10px,否则高度将是类的 css 样式设置的默认值container。
现在我阅读了有关ngStyle 的Angular 文档,但找不到实现此目的的正确语法。我能做的最接近的是添加类似的内容[ngStyle]="{'height': isShrinked?'10px':''}"但这显然不起作用,因为我必须在这个三元表达式的右侧给出一个值,这不是我打算做的。
有人可以帮助我吗?