Angular2 如何在 HTML5 模板中显示 localStorage 值?

2024-01-07

我在 localStorage 中存储 2 个密钥,我想在我的模板中显示其中之一。我无法访问这些值。我什至创建了一个接口来存储 localStorage 中的 currentUser 键的值。应该如何实施呢?

这是当前的代码:

Service

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { Md5 } from 'ts-md5/dist/md5';

import { User } from './user';
import 'rxjs/add/operator/map';

@Injectable()
export class VehicleService {
    private defUrl = 'dummy-url.com';

    constructor(private http: Http) { }
    getVehicle(username?: string, password?: string) {
        const url = (!username || !password) ? this.defUrl : 'dummy-url.com' + username + '/' + Md5.hashStr(password);
        return this.http.get(url)
            .map(res => res.json());
    }

    parseUser(): any {
        return JSON.parse(localStorage.getItem('parseUser'));
    }

    getUser(): any {
        return localStorage.getItem('currentUser');
    }
}

登录组件

import { Component, OnInit } from '@angular/core';
import { FormGroup, FormControl, Validators } from '@angular/forms';
import { Location } from '@angular/common';
import { Router } from "@angular/router"

import { VehicleService } from './vehicle.service';
import { User } from './user';

@Component({
    selector: 'login',
    templateUrl: './login.html',
    providers: [VehicleService]
})
export class LoginComponent implements OnInit {
    public user: FormGroup;

    ngOnInit() {
        this.user = new FormGroup({
            username: new FormControl('', Validators.required),
            password: new FormControl('', Validators.required)
        });
    }

    constructor(public vehicleService: VehicleService, private location: Location, private router: Router) {
    }

    onSubmit(user) {
        this.vehicleService
            .getVehicle(user.value.username, user.value.password)
            .subscribe(user => {
                this.user = user;
                localStorage.setItem('parseUser', JSON.stringify(this.user));
                this.router.navigate(['/vehicle']);
                console.log('submit');
            });
        localStorage.setItem('currentUser', user.value.username);
    }

    goBack(): void {
        console.log("Back button");
        this.location.back();
    }
}

车辆部件

import { Component, enableProdMode, OnDestroy } from '@angular/core';
import { Router } from '@angular/router';
import { FormGroup } from '@angular/forms';

import { VehicleService } from './vehicle.service';
import { User } from './user';
import { LoginComponent } from './login.component';

enableProdMode();

@Component({
  selector: 'vehicle-json',
  templateUrl: './vehicle.html',
  providers: [VehicleService]
})
export class VehicleComponent implements OnDestroy {
  public vehicles: GeneralVehicle[];
  public currUser: CurrentUser;

  ngOnDestroy() {
    localStorage.removeItem('currentUser');
  }


  constructor(private vehicleService: VehicleService, private router: Router) {
    this.vehicleService.getVehicle().subscribe(vehicle => {
      this.vehicles = vehicle;
      this.vehicles = this.vehicleService.parseUser();
      //this.vehicles = this.vehicleService.parseUser();
    });
    let currUser = this.vehicleService.getUser();
  }

  toLogin(): void {
    console.log("toLogin button");
    this.router.navigate(['/login']);
    localStorage.removeItem('parseUser');
    localStorage.removeItem('currentUser');
  }

}

interface GeneralVehicle {
  status: number;
  dallases: Vehicle[];
}

interface Vehicle {
  vehicle_id: number;
  dallassettings: string;
  dallasupdated: string;
  dallas_list: DallasList[];
}

interface DallasList {
  number: number;
  auth: number;
}

interface CurrentUser {
  usr: string;
}

模板:vehicle.html

<button class="btn btn-default" type="button" (click)="toLogin()">Login</button>
<div *ngIf="vehicles">
    <b>Status: {{vehicles?.status}} for user: DISPLAY-USER-HERE</b>
    <div class="list-group" *ngFor="let vehicle of vehicles.dallases" id="d1">
        <a class="list-group-item">
            <h4 class="list-group-item-heading" id="l1">Vehicle ID: {{vehicle.vehicle_id}}</h4>
        </a>
        <a class="list-group-item">
            <h4 class="list-group-item-heading">Dallas settings: {{vehicle.dallassettings}}</h4>
        </a>
        <a class="list-group-item">
            <h4 class="list-group-item-heading">Dallas updated: {{vehicle.dallasupdated}}</h4>
        </a>
        <a class="list-group-item">
            <h4 class="list-group-item-heading">Dallas list:</h4>
            <p class="list-group-item-text" *ngFor="let d of vehicle.dallas_list">
                <b>Number:</b> {{d.number}}<br>
                <b>Auth:</b> {{d.auth}}</p>
        </a>
    </div>
</div>

您可以使用 getter 从 localStorage 获取值并将其显示在模板中。在模板的组件类中定义它,如下所示。

get user(): any {
    return localStorage.getItem('currentUser');
}

在你的模板中:

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

Angular2 如何在 HTML5 模板中显示 localStorage 值? 的相关文章

  • 在 Fabric.js 中按宽度/高度在另一个画布对象内居中和缩放画布对象

    Goal 将一个对象 水平和垂直 置于另一个对象 矩形或组 的中心canvas via Fabric js或者通过Javascript保持原始对象的长宽比相同 但也不超过父对象的宽度 高度比例 父对象 矩形或组 不会居中于canvas元素
  • 获取点击的的DOM路径

    HTML div class lol a class rightArrow href a div 伪代码 rightArrow click function rightArrowParents this dom dom is the pse
  • 即使在包裹后也具有等宽的弹性项目

    是否可以制作一个像这样的纯 CSS 解决方案 物品有一些min width 它们应该动态增长以填充所有容器宽度 然后换行到新行 列表中的所有项目都应具有相同的宽度 现在看起来是这样的 这就是我希望它看起来像的样子 我已经手动管理这些底部项目
  • 如何在html中制作多行类型的文本框?

  • 如何让div与包含td的高度相匹配?

    我沿着桌子的一排布置了三个 面板 一个比另外两个高 我希望所有三个面板都与最高的一个的高度相匹配 我尝试将 div 的样式设置为 height 100 但是即使包含的 tds 增长 短面板仍然很短 我的 HTML 是由 JSF 生成的 因此
  • HTML 输入 - 名称与 ID [重复]

    这个问题在这里已经有答案了 使用 HTML 时
  • 如何判断何时创建新组件?

    我一直在寻找背后的逻辑当有人在 AngularJS Angular 上的 Web 应用程序中创建新组件时但我认为这更通用 可能适用于所有基于组件的前端框架 我知道有像这样的一些原则应该是抽象的和可重用的但例如我在角度文档中看到 每个单独的路
  • Angular 7:ng 测试挂起,不断重复运行测试

    我最近将 Angular 6 应用程序迁移到角7 my 包 json看起来像这样 name myApp version 3 0 0 license MIT scripts ng ng start ng serve public host h
  • 更改

    标签中一个单词的颜色

    我正在处理一份 html 文档 并且只想在我的文档中创建一个单词 p 标记不同的颜色 如果不做完全不同的事情 这可能吗 p p tag p p I want to make only THIS word blue p p style dis
  • Angular - 如何解析 event.path 内的对象

    现在这是一个很难解释的复杂问题 我会尽力解释 我有一个弹出窗口 我想从中唯一地标识单击事件是来自弹出窗口内部还是外部 我的第一个方法 我用一个包住了整个弹出框div与id 说 独特 因此 我将单击事件与主机侦听器绑定 我将为其获取事件对象
  • 删除圆形图像周围的边框

    我有一个圆形图像 png 文件 中间是透明的 我需要将图像内的背景设置为纯色 为此 我将背景设为纯色 然后将border radius 50 但这会产生一条丑陋的小白线 有没有办法摆脱这个问题 或者我必须在图像编辑器中手动为图像着色 div
  • 我应该使用哪种文档类型?

    如果我想使用可定制的 div 我应该使用哪种文档类型 具有div动画 图像移动 设置div不透明度等 我尝试通过 javascript 创建一个 div 设置其背景颜色 位置 宽度和高度 并向其添加 onmouseover 事件 一切正常
  • 如何在 Bootstrap 3 的导航栏中添加带有图标的搜索框?

    我正在使用新的 Twitter Bootstrap 3 并尝试放置一个像这样的搜索框 如下 在顶部导航栏中 在 Bootstrap 2 中 可以这样完成
  • 在随机位置启动 HTML5

    我有一个大约 2 小时长的音轨 我想在我的网站上使用它 我希望它在页面加载时在随机位置开始播放曲目 使用 HTML5 可以吗 我知道您可以使用 element currentTime 函数来获取当前位置 但是如何在完全下载之前获取曲目的总时
  • 使用 HTML5(数据列表)自动完成功能和“包含”方法,而不仅仅是“开头为”

    我找不到它 但我又不知道如何搜索它 我想用
  • 如何转义 HTML 字符?在.NET中-->“

    如何在 NET 中转义 HTML 字符 我正在从 json 字符串中获取 html 并在标题中得到 amp quot more text 看起来我需要做两次才能得到 amp quot 成为 quot 那么它就是一个 如何转义 NET 中的所
  • 电话输入自动填充会删除国际前缀

    我有一个类型为 tel 的输入字段 并启用了自动完成功能
  • HTML 代码中的 PHP [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我用 HTML 代码编写了 PHP div div 但这出现在输出页面中 else print 我怎样才能让PHP执行 你的文件有一个 p
  • 将特定字形与网络字体一起使用

    使用网络字体 我想使用字体功能设置 CSS 中的选项以及跨度类HTML 中 以便使用字体集中的特定替代字形 我需要以正确的语法使用哪些值 GID Unicode 才能定位特定的目标glyph内glyph备择方案 这些功能使用 OpenTyp
  • CSS 精灵按钮

    这些精灵按钮让我抓狂 我几乎可以让他们工作 但不完全是 我正在玩这个非常简单的精灵图像 我有一个 jsfiddle 项目 gt gt 这里 如果你想看的话 但如果你只想看一下 代码就在下面 http jsfiddle net jp2code

随机推荐

  • ValueError:“对象对于所需数组来说太深”

    我在 Python 程序中遇到 ValueError object too deep fordesired array 我在使用 numpy digitize 时遇到此错误 我认为这就是我使用 Pandas DataFrames 的方式 为
  • LinkedIn 有测试其 API 的平台吗?

    我找不到 Playground 或 API Explorer 来测试 Linkedin API 我在过去两年左右的时间里尝试过 但每次都放弃了 有吗 简单的答案是否定的 没有 API 浏览器或游乐场 BUT然而 linkedin 有一个测试
  • GCC:-static 和 -pie 与 x86 不兼容?

    我正在为 Android 5 0 重新编译一些可执行文件 因为它需要可执行文件PIE 我能够重新编译它ARM只需在配置时添加一些参数 使用独立工具链 export CFLAGS I softdev arm libs include fPIE
  • 使用数组条件跳出循环

    我目前正在为课堂制作一个滑道和梯子游戏 这场比赛的获胜条件是如果玩家落在 Square 100 上 他们就获胜 如果他们碰巧超过了 100 他们会一直呆在那里 直到每个人都完成游戏 要么有人达到 100 要么每个人都超过 100 如果每个人
  • 如何同步从LiveData获取值?

    For LiveData 有没有类似的东西blockingNext or blockingSingle在RxJava的Observable中同步获取值 如果没有 我怎样才能实现相同的行为 您可以致电getValue 返回当前值 如果有 但是
  • 为什么人们仍然在 Java 中使用原始类型?

    从 Java 5 开始 我们对原始类型进行了装箱 拆箱 以便int被包裹成java lang Integer 等等 我最近看到了很多新的 Java 项目 确实需要至少版本 5 如果不是 6 的 JREint而不是java lang Inte
  • 在 C++ 中用函数调用替换强制转换

    有关重构 替换强制转换的工具或方法的任何建议 例如 type data into convert to type data 当事情变得更加棘手时data其中有更高优先级的运算符 括号或换行符 type a b gt c 应该成为conver
  • Cucumber和Spring boot集成出现错误

    Spring boot和cucumber集成 当我将该项目打包为jar时 使用mvn package命令并生成advvic 1 0 jar 但是 如果我运行这个罐子 java jar target advvic 1 0 jar 我收到此错误
  • 为什么 DataTemplate.LoadContent() 不尊重模板定义的触发器?

    TL DR版本 我们试图找出触发器有效时自动应用 DataTemplate 与触发器无效时手动调用 DataTemplate LoadContent 之间的区别 现在细节 但首先 我首先要说的是 这个问题是为了帮助我们理解框架以及它内部在做
  • C# 正则表达式电话号码检查

    我有以下内容来检查电话号码是否采用以下格式 XXX XXX XXXX 下面的代码始终返回 true 不知道为什么 Match match Regex Match input d 3 d 3 d 3 d 4 Below code always
  • 在 django 中运行“syncdb”时如何指定模式名称?

    假设我有一个名为 my schema 的模式 如何为该特定模式创建带有 djangosyncdb 的表 或者还有其他选择可以从我的 django 模型快速创建表吗 我认为 默认情况下 django 为 公共 模式创建表 首先 您必须拥有 p
  • 无需打开表单即可获取表单记录源

    MS Access 是否允许在不打开表单本身的情况下获取表单的记录源值 我现在正在尝试优化我的代码 我所做的只是隐藏表单 然后获取 Recordsource 表单查询 但加载需要时间 因为某些表单在加载时会触发代码 我在这里玩游戏迟到了 我
  • 对于嵌套模板,“>>”何时成为标准 C++(而不是“> >”)?

    我似乎记得 以前 有人警告不要放两个 gt 处理嵌套模板参数时 字符彼此相邻 没有空格 我什至依稀记得声明任何向量的向量并遇到此编译错误 但现在我发现编译可怕的东西绝对没有错 gt gt 我的问题是 这个惯例在什么时候成为可以接受的做法 它
  • Postgresql 中的 Postgresql 全文搜索 - 日语、中文、阿拉伯语

    我正在为我当前的项目设计一个 postgresql 全文搜索功能 到目前为止 它可以与 ispell myspell 词典配合使用 现在我需要添加对中文 日文和阿拉伯文搜索的支持 我从哪说起呢 没有适用于这些语言的模板或词典 据我所知 它可
  • SQL - 将单列划分为多列

    我有以下 SQL 问题 如何使用 SELECT 命令将列 内部文本 分成两个带有分割文本的单独列 我需要使用空格字符分隔文本数据 我知道最好举个例子来让它变得容易 所以 SELECT COLUMN A FROM TABLE1 output
  • 清理AjaxToolkit AsyncFileUpload控件

    我在我的 aspx net 页面中使用 AsyncFileUpload 控件 该控件在更新面板内运行 我可以成功地将文件异步上传到服务器 我的问题是 每个文件上传后我无法刷新整个页面 所以我需要弄清楚如何清除上次上传的文件 这样当用户选择新
  • 了解多处理:Python 中的共享内存管理、锁和队列

    多重处理 https docs python org 2 library multiprocessing html module multiprocessingpython中的一个强大的工具 我想更深入地了解它 我想知道什么时候使用regu
  • 奇怪的 JavaScript 性能依赖于变量范围

    在测试一个 JavaScript 项目的性能时 我注意到一种非常奇怪的行为 JavaScript 成员访问性能似乎很大程度上受到它们所在范围的影响 我编写了一些性能测试 结果因多个数量级 我在 Windows 10 64 位上使用以下浏览器
  • 全局点击事件处理程序(WithEvents)

    我正在尝试创建一个类模块 当有人单击我表单中的六十个文本框之一时 它将充当全局处理程序 文本框代表一周的时间卡 显示一周 7 天的上班时间 下班时间 午餐开始 结束 持续时间 每日总小时数等信息 当有人单击一天中的任何一个框时 所有框都会解
  • Angular2 如何在 HTML5 模板中显示 localStorage 值?

    我在 localStorage 中存储 2 个密钥 我想在我的模板中显示其中之一 我无法访问这些值 我什至创建了一个接口来存储 localStorage 中的 currentUser 键的值 应该如何实施呢 这是当前的代码 Service