如何以角反应形式保存价值?

2024-02-29

当用户导航到不同的组件(例如隐私策略)并返回表单时,我希望在角度表单输入字段中保留值。当用户从隐私政策返回到表单时,他应该看到之前输入的数据


  • 单击“保存”按钮后如何保留数据。

当用户单击“保存”按钮时,我们调用下面的方法,它会删除旧密钥并将新表单(MessageForm)数据保存在本地存储中。


      onSave() {
    
        //removes the data with key as user
        localStorage.removeItem("teja");
    
        //adds new data with key as user
        localStorage.setItem("teja", JSON.stringify(this.MessageForm.value));
    
        //reset form once form is edited dirty flag is set 
        //so we need to reset form else on close we get 
        //notification saying form is dirty even when user clicked on save
        this.MessageForm.reset(JSON.parse(localStorage.getItem('teja')));
      }

当我们再次加载页面时,我们可以使用键“teja”从该存储中检索数据


      ngOnInit(): void {
        //retrieves data if exists.
        if (localStorage.getItem('teja')) {
          this.MessageForm.setValue(JSON.parse(localStorage.getItem('teja')));
        }
      }

  • 用户修改了表单而不保存并尝试关闭窗口,您有 2 个选择,要么弹出窗口说他有未保存的数据,要么将表单存储在本地存储中。我将在这里混合它们。

      @HostListener('window:beforeunload', ['$event']) unloadNotification($event: any) {
        if (this.MessageForm.dirty) {
          //store data
          localStorage.setItem("teja", JSON.stringify(this.MessageForm.value));
          //show popup
          $event.returnValue = true;
        }
      }

使用hostistener,您可以处理窗口关闭或页面刷新等事件。在其中,我们检查表单是否脏,仅当用户修改表单时才设置。 您将看到的一个问题是,如果用户单击“保存”并尝试关闭窗口,您仍然会收到弹出窗口,提示用户有未保存的数据。这是因为一旦编辑了表单,就会设置其脏标志。您需要重置它。 最后将以下逻辑添加到 Onsave 中


    //reset form once form is edited dirty flag is set 
    //so we need to reset form else on close we get 
    //notification saying form is dirty even when user clicked on save
    this.MessageForm.reset(JSON.parse(localStorage.getItem('teja')));

  • 谈到当用户导航到不同页面而不保存数据时如何保存数据的问题。两种选择
  1. 当用户导航到不同页面时弹出窗口或保存数据 到 localstorage 创建一个如下所示的守卫(命令: ng g Guard 保护名)

    import { AppComponent } from './../app/app.component';
    import { Injectable } from '@angular/core';
    import { CanActivate, CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';
    import { Observable } from 'rxjs';
    
    @Injectable({
      providedIn: 'root'
    })
    export class UnsavedataGuard implements CanDeactivate<unknown> {
    
      canDeactivate(
        component: AppComponent): boolean {
        if (component.MessageForm.dirty) {
          localStorage.setItem("teja", JSON.stringify(component.MessageForm.value));
          return confirm('Are you sure you want to continue? Any unsaved changes will be lost');
        }
        return true;
      }
    
    }

更新您访问守卫的路线


    const routes: Routes = [
        { path: '', component: AppComponent, canDeactivate: [UnsavedataGuard] },
        { path: '**', component: AppComponent, pathMatch: 'full' }
    ];

  1. 用户修改表单时将数据保存到本地存储 - 我将离开这部分的研究,因为代码对我来说不方便????

请查找缩小版教程:https://tejaxspace.com/storage-local-session/ https://tejaxspace.com/storage-local-session/

请找到一个 Angular 演示应用程序:https://github.com/tejaswipandava/AngularDataPersistence.git https://github.com/tejaswipandava/AngularDataPersistence.git

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以角反应形式保存价值? 的相关文章

随机推荐

  • 递归排列列表

    我想通过递归来解决问题 我有一个给定的字母列表 我想要这些字母的所有排列 直到达到给定的长度 var letters A B C D E F function myRekursion alphabet n if n gt 0 for var
  • 高效利用Android资源

    我试图弄清楚如何有效地使用 Android 的资源系统 既提供最高分辨率的资源 又保持较小的 apk 大小 我的资源文件夹 drawable normal mdpi drawable normal hdpi drawable large m
  • 使用 OpenMP 在两个内核上设置线程关联

    我使用的是C程序 在Windows7上用gcc 4 9 2编译 使用OpenMP 4 0 我的电脑是双核 四个线程 我想使用线程亲和力传播并使用放置在不同核心上的 2 个线程 因此 当我从 DOS 设置环境变量时 设置 OMP NUM TH
  • Xamarin-Android 和 UWP 之间的蓝牙连接

    在相当多的时间里 我一直在努力寻找一个可行的解决方案来通过 IP 连接或蓝牙连接 Android 设备和 UWP 应用程序 在 PC 上 主要问题是找到一组足够简单但又保证可以工作的代码或示例 这样我的努力就不会白费 这种情况已经持续了一个
  • 为什么要加密用户密码? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么不存储原始密码 https stackoverflow com questions 3107810 why arent original passwords stored 如果密码是数据中最不有
  • Laravel 设置无法打开流

    我正在尝试设置 laravel 但事实证明它是正确的 我从 github 克隆了它 还使用 Composer 克隆了 Laravel 这两种技术都可以工作 这很好 因为它是我真正想学习的东西 比我想象的简单 然而 当我尝试导航到名为 iPr
  • Rowset不支持向后滚动

    我正在尝试使用以下代码查询 MySQL 数据库 declare the variables Dim Connection Dim Recordset Dim SQL declare the SQL statement that will q
  • 读取分区镶木地板时,Spark 错误地将以“d”或“f”结尾的分区名称解释为数字

    我在用着spark read parquet 从分区中组织镶木地板文件的文件夹中读取 当分区名称以以下结尾时 结果将是错误的f or d 显然 Spark 会将它们解释为数字而不是字符串 我创建了一个最小的测试用例 如下所示来重现该问题 d
  • 无法在 eclipse 中安装 blackberry webworks 插件

    using http www blackberry com go eclipseUpdate 3 6 java http www blackberry com go eclipseUpdate 3 6 java 我安装了Blackberry
  • Python TypeVar 中输出变量和第一个参数之间的区别

    我正在查看 Python TypeVar 的文档 但无法弄清楚第一个参数 或者可能是赋值变量 的含义 从 3 8 文档 A TypeVar A str bytes Must be str or bytes def longest x A y
  • pyautogui,屏幕截图功能无法识别已安装的 Pillow 模块

    我想在Pycharm中执行这段代码 x y pyautogui locateCenterOnScreen LVL35 png 但我收到这条消息 ImportError Pillow module must be installed to u
  • 如何在android布局中创建固定页脚?

    我正在使用以下代码在活动底部显示按钮
  • 如何将程序限制为单个实例

    我有一个 C 控制台应用程序 我想限制我的应用程序一次仅运行一个实例 我如何在 C 中实现这一目标 我会用一个Mutex http msdn microsoft com en us library system threading mute
  • 引导 gem5 X86 Ubuntu 完整系统模拟

    我需要在 gem5 上运行相对较新版本的 x86 磁盘映像 从 开始本指南 http www lowepower com jason creating disk images for gem5 html我使用了带有 Kernel v3 2
  • 实施到我的应用程序的深层链接后,应用程序图标不出现

    我正在 Android Studio 中开发一个应用程序 它运行得很好 但是在实现了到我的启动活动的深层链接后 我的应用程序没有出现在菜单中的应用程序图标 我知道该应用程序已安装 因为它出现在 设置 gt 应用程序 中 我知道问题出在man
  • 如何将 python 字符串转换为 ucs2 十六进制?

    我一直在寻找这个 但找不到 尽管它看起来很简单 我需要在 url 中发送 ucs2 十六进制字符串 但我不知道如何将 python 字符串转换为 ucs2 十六进制 有什么想法吗 gt gt gt encode utf16 b xff xf
  • 将视频字幕与文本转语音同步

    我尝试创建一个文本视频 其中的文本通过文本转语音进行叙述 为了创建视频文件 我使用VideoFileWriter of Aforge Net如下 VideoWriter new VideoFileWriter VideoWriter Ope
  • R 中通过列值的排列进行聚合

    背景 我正在处理出发地 目的地数据 我想计算每对城市之间的比例流量 但是 我发现很难按每对城市聚合数据 因为这些城市对涉及列条目的排列 我可以使用大量 for 循环和条件通过暴力来完成此操作 但这需要很长时间才能计算 具体来说给定以下形式的
  • 在 React-Redux 中实时重新排序列表的最佳方法?

    I m currently build an app that have a realtime list the view of list as bellow picture 当触发以下操作之一时 此列表将实时更新 有消息更新 update
  • 如何以角反应形式保存价值?

    当用户导航到不同的组件 例如隐私策略 并返回表单时 我希望在角度表单输入字段中保留值 当用户从隐私政策返回到表单时 他应该看到之前输入的数据 单击 保存 按钮后如何保留数据 当用户单击 保存 按钮时 我们调用下面的方法 它会删除旧密钥并将新