:enter第一次渲染组件时,动画将应用于元素.有没有办法防止它?
检查此plunker以获取width动画的简单示例:
transition(':enter', [
style({width: 0}),
animate(250, style({width: '*'})),
]),
Run Code Online (Sandbox Code Playgroud) 我在底部嵌套了带有文本的flex元素.顶部元素的固定宽度小于文本:
.list-header {
display: flex;
width: 150px;
height: 80px;
background-color: #ececec;
}
.list-component {
display: flex;
flex: 1;
padding-left: 24px;
padding-right: 24px;
}
.header-container {
display: flex;
flex: 1;
}
.header-text {
display: flex;
flex-direction: column;
justify-content: center;
overflow: hidden;
}
span {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}Run Code Online (Sandbox Code Playgroud)
<div class="list-header">
<div class="list-component">
<div class="header-container">
<div class="header-text">
<span>long long long long long long text</span>
</div>
</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
我可以通过应用于overflow: hidden;所有元素来解决这个问题:
.list-header {
display: flex;
width: 150px;
height: …Run Code Online (Sandbox Code Playgroud)我们的想法是让用户POST表单.并触发API返回的错误,如果用户已经注册,则将电子邮件字段设置为错误.
我使用FormBuilder的反应形式,我尝试在订阅错误捕获器中调用验证器:
构造函数:
this.email = fb.control('', [Validators.required, Validators.pattern(/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/), SignupComponent.alreadyExist()]);
this.username = fb.control('', [Validators.required, Validators.pattern(/^([A-ZÀ-ÿa-z0-9]{2,})+(?:[ _-][A-ZÀ-ÿa-z0-9]+)*$/)]);
this.userRegisterForm = fb.group({
email: this.email,
username: this.username
});
Run Code Online (Sandbox Code Playgroud)
自定义alreadyExist()验证器:
static alreadyExist(alreadyExist: boolean = false): any {
return (control: FormControl): { [s: string]: boolean } => {
if(alreadyExist) {
return { emailAlreadyExist: true }
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
onSubmit():
this.user.create(newUser)
.subscribe(
data => {
this.router.navigate(['signin']);
},
error => {
if(error.status === 401) {
// CALL THE VALIDATOR HERE TO SET : FALSE
SignupComponent.alreadyExist(true);
}
this.loading = …Run Code Online (Sandbox Code Playgroud)