You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Angular 10中自动重置formGroup绑定的表单输入值?

问题根源

你当前的代码逻辑中,每次SearchComponent初始化时都会从全局/父级维护的this.values[0].value读取历史搜索词赋值给表单,你在ngOnDestroy中只做了订阅取消的操作,既没有清空表单的当前值,也没有清空this.values[0].value中存储的历史搜索词,所以下次进入搜索页时,ngOnInit会重新把旧的搜索词回填到输入框中,和订阅是否取消没有关联。

解决方案

直接在已触发的ngOnDestroy钩子中补充重置逻辑即可,修改后的代码如下:

ngOnDestroy(): void {
  this.searchSub.unsubscribe();
  // 重置表单所有字段值
  this.searchForm.reset();
  // 清空存储的历史搜索词,避免下次组件初始化时回填旧值
  this.values[0].value = '';
  console.log("haha")
}

特殊场景补充

如果调整后仍存在缓存问题,可检查项目是否开启了路由复用策略(常见于中后台框架默认配置):

  • 若开启了路由复用,可配置排除/search路由的缓存,保证离开页面时组件会正常销毁触发ngOnDestroy
  • 也可将表单初始化赋值逻辑替换为强制设空,不用读取存储的历史值:
ngOnInit(): void {
  // 直接设为空,不读取历史存储值
  this.searchForm.get('search')?.setValue('');
  // 后续订阅逻辑保持不变
  this.searchSub = this.searchForm.controls.search.valueChanges
    .pipe(debounceTime(400), distinctUntilChanged())
    .subscribe(
      (term) => {
        this.values[0].value = term;
        this.emitState();
      },
      (err) => console.log(err)
    );
}

内容的提问来源于stack exchange,提问作者WenliL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:45:07