首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >闪光消息在Angular2中消失后重定向

闪光消息在Angular2中消失后重定向
EN

Stack Overflow用户
提问于 2018-04-06 20:27:12
回答 2查看 317关注 0票数 0

我有一个调用服务的函数。

代码语言:javascript
运行
复制
submitPost(value:any)
{    
    this._adminLogin.postAdminLogin(this.adminLoginmodel).subscribe(
          data => {
                this.responseStatus = data;
                if(this.responseStatus.status == 1)
                {
                  localStorage.setItem('admin_id', this.responseStatus.detail.id);
                  this._flashMessagesService.show(this.responseStatus.message, { cssClass: 'alert-success', timeout: 5000 });
                  top.location.href = 'admin/dashboard';
                }
                else
                {
                  this._flashMessagesService.show(this.responseStatus.message, { cssClass: 'alert-danger', timeout: 2000 });
                }
              },
          err => {
                console.log(err)
              },
          () => {}
      ); 
      this.status = true;       
}

我关心的是这段代码:

代码语言:javascript
运行
复制
if(this.responseStatus.status == 1)
{
    localStorage.setItem('admin_id', this.responseStatus.detail.id);
    this._flashMessagesService.show(this.responseStatus.message, { cssClass: 'alert-success', timeout: 5000 });
    top.location.href = 'admin/dashboard';
}

有没有办法在5000毫秒后flash消息消失后执行重定向操作?就像这样:

代码语言:javascript
运行
复制
if(this.responseStatus.status == 1)
{
    localStorage.setItem('admin_id', this.responseStatus.detail.id);
    this._flashMessagesService.show(this.responseStatus.message, { cssClass: 'alert-success', timeout: {function(){ top.location.href = 'admin/dashboard'; }, 5000 });
}
EN

回答 2

Stack Overflow用户

发布于 2018-04-06 20:42:49

下面的代码应该在消息消失后导航。您的flashMessage将显示5000毫秒,您的导航应在7000毫秒之后显示

代码语言:javascript
运行
复制
if(this.responseStatus.status == 1)
{
    localStorage.setItem('admin_id', this.responseStatus.detail.id);
    this._flashMessagesService.show(this.responseStatus.message, { cssClass: 'alert-success', timeout: 5000 });
    setTimeout(()=>{
      top.location.href = 'admin/dashboard';
    },7000);

}
票数 0
EN

Stack Overflow用户

发布于 2018-04-06 20:43:40

我会通过让_flashMessagesService.show()返回一个可观察对象来做到这一点。

在_flashMessageService中,如下所示:

代码语言:javascript
运行
复制
myObserver : Observer<any>

function show(){
  // do stuff
  return Observable.create(observer =>{ 
     this.myObserver =observer;
  });
}

当您准备解析可观察对象时,您可以执行以下操作:

代码语言:javascript
运行
复制
this.myObserver.next('Possibly some value here');  
this.myObserver.complete();

在您的调用代码中

代码语言:javascript
运行
复制
 this._flashMessagesService.show()
     .subscribe(result=> { top.location.href = 'admin/dashboard'});}

我一直在做类似的事情。

另一种可能更简单的替代方法是在主组件中使用Observable.timer

代码语言:javascript
运行
复制
Observable.timer(5000).subscribe(result=> { top.location.href = 'admin/dashboard'}); 

我更喜欢第一种方式,因为它取决于flashMessage服务决定flash消息何时消失,而不是硬编码的时间值。

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

https://stackoverflow.com/questions/49692819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档