首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在angular2中重新加载/刷新所有当前组件?

如何在angular2中重新加载/刷新所有当前组件?
EN

Stack Overflow用户
提问于 2016-06-22 15:33:09
回答 1查看 14.6K关注 0票数 1

您好,我正在使用angularjs2 https://angular.io/docs/ts/latest/guide/router.html的新alpha组件路由器

我有一个验证用户身份的模式,然后在本地存储中创建一个JWT,它保存用户所需的信息。

我的问题是,如果用户正在查看/home路径,其中有一些内容只对登录的用户可见,但在他通过模式登录后,他必须刷新页面,以便组件将刷新并显示正确的登录信息

有没有办法让angular2刷新当前路径上的所有组件?就像页面重新加载,但不需要真正重新加载整个页面(我不想只为用户点击刷新按钮)

提前感谢

编辑:当我尝试重定向到我已经在的路线时,也许有一个功能可以强制重定向?

EDIT2:尝试使用可观察对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Injectable()
export class UserService {
  private loggedInObservable;

    constructor(private http: Http) {
        this.loggedInObservable = Observable.of(this.checkIsLoggedIn());
    }

    checkIsLoggedIn() {
        let isLoggedIn = false;
        try {
            isLoggedIn = tokenNotExpired();
        } catch(e) {

        }
        console.log('returning:', isLoggedIn);
        return isLoggedIn;
    }


    login(model, cbSuccess=null, cbError=null, cbAlways=null) {
        serverPost(this, '/api/users/login', model, cbSuccess, cbError, cbAlways, (data)=> {
            localStorage.setItem("id_token", data.id_token);
            this.loggedInObservable.map((val) => console.log('HELLO?'));
        });
    }

    isLoggedInObservable() {
        return this.loggedInObservable;
    }
}

地图什么也不做(“HELLO?”没有显示),尽管观察者有一个值,但map函数不会调用任何东西。

使用观察者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {Component, OnInit, OnDestroy} from '@angular/core';
import {UserService} from '../../services/userservice';

@Component({
  selector: 'test-thing',
  template: require('./test-thing.html'),
  styles: [require('./test-thing.scss')],
  providers: [],
  directives: [],
  pipes: []
})
export class TestThing implements OnInit, OnDestroy{
    private isLoggedIn = false;
    private sub: any;

    constructor(private userService: UserService) {

    };

    ngOnInit() {
      this.sub = this.userService.isLoggedInObservable().subscribe(loggedIn => {
        this.isLoggedIn = loggedIn;
      });
    }

    ngOnDestroy() {
      this.sub.unsubscribe();
    }
}

初始值正常工作,但当我尝试在成功登录(使用map)后更改该值时,没有任何反应,什么也没有发生。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-24 09:56:55

好的,看起来我需要的是一个BehaviorSubject,因为你可以将值推入它,订阅它来获取更改,它会投影出你第一次订阅它时获得的最后一个值,这正是我需要的。

我的代码现在如下:

userservice.ts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {Injectable} from '@angular/core';
import {Http} from '@angular/http';
import {serverPost} from '../../functions';
import {BehaviorSubject} from 'rxjs/BehaviorSubject'
import {tokenNotExpired} from 'angular2-jwt';

@Injectable()
export class UserService {
    private isLoggedInSubject: BehaviorSubject<boolean>;

    constructor(private http: Http) {
        this.isLoggedInSubject = new BehaviorSubject(this.checkIsLoggedIn());
    }

    get loggedInObservable() {
        return this.isLoggedInSubject.asObservable();
    }

    checkIsLoggedIn() {
        let isLoggedIn = false;
        try {
            isLoggedIn = tokenNotExpired();
        } catch(e) {

        }
        return isLoggedIn;
    }

    signUp(model, cbSuccess=null, cbError=null, cbAlways=null) {
        serverPost(this, '/api/users', model, cbSuccess, cbError, cbAlways, (data)=> {
            localStorage.setItem("id_token", data.id_token);
            this.isLoggedInSubject.next(this.checkIsLoggedIn());
        });
    }

    login(model, cbSuccess=null, cbError=null, cbAlways=null) {
        serverPost(this, '/api/users/login', model, cbSuccess, cbError, cbAlways, (data)=> {
            localStorage.setItem("id_token", data.id_token);
            this.isLoggedInSubject.next(this.checkIsLoggedIn());
        });
    }
}

下面是我在组件中使用它的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export class TestComponent implements OnInit, OnDestroy{
    private isLoggedIn = false;
    private loginSub;

    constructor(private userService: UserService) {

    };

    ngOnInit() {
      this.loginSub = this.userService.loggedInObservable.subscribe(val => {
        this.isLoggedIn = val;
      });
    }

    ngOnDestroy() {
      this.loginSub.unsubscribe();
    }

}

这个设置非常适合我的需要。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37972508

复制
相关文章
[系统安全] 四十.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法
该系列文章将系统整理和深入学习系统安全、逆向分析和恶意代码检测,文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。漫漫长征路,偏向虎山行。享受过程,一起加油~
Eastmount
2023/02/28
8.9K0
[系统安全] 四十.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法
利用powershell 生成sqlserver 对象脚本
首先,创建一个server 对象实例,然后连接它。我只需要引入Script() 方法,脚本如下:
用户1217611
2022/05/06
9170
使用管道符在PowerShell中进行各种数据操作
最近在培训PowerShell,在讲到Pipeline的时候,对于我这种长期和数据(数据库)打交道的人来说,觉得很实用,所以写此博文,记录一下。
深蓝studyzy
2022/06/16
2.3K0
关于go的只读管道只写管道以及单向管道的理解
上面的例子,writeChan只能对ch变量进行写操作,readChan只能对ch变量进行读操作,这样造成很多同学对管道理解就有了只读和只写管道了,其实管道都是双向的,默认双向可读写,只是管道在函数参数传递时可以使用操作符限制管道的读写,就如上面的例子。
公众号-利志分享
2022/04/25
1K0
PowerShell系列(七)PowerShell当中的Provider介绍
今天给大家讲解PowerShell当中的非常重要的概念Provider相关的知识,希望对大家能有所帮助!
小明互联网技术分享社区
2023/09/26
3920
PowerShell系列(七)PowerShell当中的Provider介绍
图片加载失败的正确处理[通俗易懂]
对于这样一段代码来讲,如果该图片加载成功,那么界面上会显示图片,如果由于一些原因导致图片加载失败,会出现这样的图标。
全栈程序员站长
2022/08/23
2.4K0
图片加载失败的正确处理[通俗易懂]
Flutter SDK变更后的正确处理方式
网上有些方法用了未必有效。比如有说直接修改项目中的.packages文件,改完后可能还会有问题。
IT晴天
2020/02/18
2.3K0
Node中POST请求的正确处理方式
Node的 http 模块只对HTTP报文的头部进行了解析,然后触发 request 事件。如果请求中还带有内容部分(如 POST 请求,它具有报头和内容),内容部分需要用户自行接收和解析。
Qiang
2019/06/20
2K0
Node中POST请求的正确处理方式
在 JavaScript 正确处理变量
变量无处不在。即便我们写一个小函数或一个小工具,也要声明、赋值和读取变量。增强对变量的重视,可以提高代码的可读性和可维护性。
疯狂的技术宅
2020/12/31
6110
PowerShell系列(二):PowerShell和Python之间的差异介绍
今天给大家聊聊PowerShell和Python之间有哪些共同之处,各自有哪些优势,希望对运维的朋友了解两种语言能提供一些有用的信息。
小明互联网技术分享社区
2023/09/20
6270
PowerShell系列(二):PowerShell和Python之间的差异介绍
前端正确处理“文字溢出”的思路
然而当用户缩放浏览器显示的尺寸时,我们需要做到省略中间的文字,选择保留后缀这种方案。如下图所示:
@超人
2023/05/12
7630
前端正确处理“文字溢出”的思路
PowerShell的开源实现
从Mono老大的blog上Open Source Powershell Implementation 看到了一个PowerShell的开源实现的项目Pash。目前可以运行的平台包括Linux, Mac
张善友
2018/01/31
6900
PowerShell的开源实现
正确处理 CSV 文件的引号和逗号
CSV(Comma-Separated Values,逗号分割值),就是用纯文本的形式存储表格数据,最大的特点就是方便。
仁扬
2023/07/02
1.2K0
Powershell中的变量
在我们的迷你系列“Variables in Shells”中,了解如何在PowerShell中处理局部变量。
QRosie
2019/11/24
3K0
Powershell中的变量
PowerShell系列(三):PowerShell发展历程梳理
Windows Server 2003 SP1/SP2,Windows Server2003 R2, Windows XP SP2, and Windows Vista
小明互联网技术分享社区
2023/09/21
4610
PowerShell系列(三):PowerShell发展历程梳理
PowerShell revshells
PowerShell revshells 在提示符和工作目录上方显示 username@computer 有部分 AMSI-bypass,使一些事情更容易 TCP 和 UDP Windows Powershell 和核心 Powershell 上传和下载文件的功能。(使用sc0tfree的 Updog) ngrok 支持 ngrok 可以从脚本内部启动/停止 有效载荷将与 ngrok 地址一起生成 更新支持 您可以从脚本内部启动/停止 Updog PowerShell revshells 嵌入了上传/下
Khan安全团队
2023/02/23
1.4K0
PowerShell revshells
Redis的管道Pipeline
文章目录 1. Redis的管道(Pipeline) 1.1. 为什么使用管道 1.2. 客户端使用管道执行命令 1.2.1. API Redis的管道(Pipeline) 为什么使用管道 其中redis的执行一条命令可以分为四个步骤 发送命令 命令排队 命令执行 返回结果 其中1-4之间所需要的时间称为往返时间(RTT) Redis提供了批量操作命令(例如mget、mset等),有效地节约RTT。但 大部分命令是不支持批量操作的,例如要执行n次hgetall命令,并没有 mhgetall命令存在,需要
爱撒谎的男孩
2019/12/31
1.6K0
Shell中的管道
管道 管道,从一头进去,从另一头出来。 在Shell中,管道将一个程序的标准输出作为另一个程序的标准输入,就像用一根管子将一个程序的输出连接到另一个程序的输入一样。 管道的符号是|,下面的程序将cat的标准输出作为less的标准输入,以实现翻页的功能: $ cat source.list.bk | less tee 有时候我们想要同时将程序的输出显示在屏幕上(或进入管道)和保存到文件中,这个时候可以使用tee。 tee程序的输出和它的输入一样,但是会将输入内容额外的保存到文件中: $ cat hello.t
mwangblog
2018/07/04
9100
Dart 编码规范:正确处理 null
在 Dart 编码中,我们会经常遇到需要处理 null 的场合。Dart 2.12版本引入 null safety 以后,对 null 的处理有了新的规范。关于 null safety 特性,可以阅读本人的另一篇文章:升级踩坑,聊聊 Dart 的 null safety,本篇介绍如何正确处理 null。
玖柒的小窝
2021/11/21
1.3K0
Dart 编码规范:正确处理 null
Windows PowerShell:(
  Cmdlets 用于服务器的管理方面主要体现在4个方面:服务、日志、进程、服务器管理器。
py3study
2020/01/07
3.1K0

相似问题

使用knex和无服务器脱机时连接获取的问题

16

onActivityResult resultCode在使用照相机时总是0

10

在lambda上,无服务器函数总是超时

22

使用无服务器在lambda上部署代码失败

20

LibGit2Sharp无响应性

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文