最近,我遇到了这一挑战...重构形式成分的角度信号。
旧形式组件的工作原理:
>
@input({required: true})
user!: user;
<div> <label for="firstname">first name</label> <input id="firstname" name="firstname" [(ngmodel)]="user.firstname" /> </div>
的形式
重构以信号输入使用角信号输入,我们可以使组件输入反应性。这听起来很棒!
fyi信号输入是新项目的推荐方法。来自角文档:
>让我们对信号输入进行重构我们的经典angular @input:
user = input.required<user>();
信号输入对象值和[(ngmodel)]

此代码看起来很不错!
<div>
<label for="firstname">first name</label>
<input
id="firstname"
name="firstname"
[(ngmodel)]="user().firstname"
/>
</div>
!这些危险区域:
>但是,等等...我们刚进入危险区...☢️☣️⚠️⚠️
这行代码[(ngmodel)] =“ user()。firstname” will
stutate> untate
> use对象(包装到信号中),每当文本输入值更改救援
>让我们尝试尽可能快地逃脱。有什么可能的解决方案?
>>使用链接信号,我们可以创建一个可写的
用户可典型的用户是我们的链接信号...
>export class userdetailcomponent {
user = input.required<user>();
editableuser = linkedsignal(() => this.user());
updateeditableuser(v: partial<user>) {
this.editableuser.update(state => ({...state, ...v}))
}
}
<div>
<label for="firstname">first name</label>
<input
id="firstname"
name="firstname"
[ngmodel]="editableuser().firstname"
(ngmodelchange)="updateeditableuser({firstname: $event})"
/>
</div>
>每当文本输入值更改时,都将执行ngmodelchange回调(更新edediastenuser),并且将更新链接的信号
>
pros
我们使用公共信号api更新状态
cons
export class userdetailcomponent {
_user = input.required<user>({alias: 'user'});
user!: user;
constructor() {
effect(() => this.user = this._user())
}
}
<div>
<label for="firstname">first name</label>
<input
id="firstname"
name="firstname"
[(ngmodel)]="user.firstname"
/>
</div>
pros
cons
>命名挑战:_user信号,“用户”别名,原始用户对象的用户属性
@let方法
使用@let,我们可以在模板中声明变量。
@let userclone = user() | structuredclone;
<div>
<label for="firstname">first name</label>
<input
id="firstname"
name="firstname"
[(ngmodel)]="userclone.firstname"
/>
</div>
export class UserDetailComponent {
user = input.required<User>();
}
笔记
对象与原始值
>让我们看一下@let方法:
@let变量仅读取...这意味着我们无法将新值重新分配给@let变量。另外,不是通过[(ngmodel)]。如果我们尝试了,那么我们可以看到此编译错误:
>效果和链接信号也是有效的选项,但需要更多的设置。
>
以上就是双向将信号输入对象值绑定为[(ngmodel)]的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号