首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用允诺的Angular9模型

使用允诺的Angular9模型
EN

Stack Overflow用户
提问于 2020-06-13 16:00:51
回答 1查看 193关注 0票数 1

我试图在角9中建立一个模态,结果是返回一个承诺。我不知道如何将承诺逻辑移出声明之外。

代码语言:javascript
复制
<a class="button-primary" (click)="yes()">Yes</a>
<a class="button-default" (click)="no()">No</a>

这是模态控制器

代码语言:javascript
复制
import { Component, OnInit, HostBinding } from '@angular/core';

@Component({
  selector: 'change-username-modal',
  templateUrl: './change-username-modal.component.html',
  styleUrls: ['./change-username-modal.component.less']
})
export class ChangeUsernameModalComponent implements OnInit {

  @HostBinding('class.show')
  show: boolean = false;

  constructor() { }

  ngOnInit(): void {
    console.log('init');
  }

  public open(): Promise<boolean> {
    return new Promise(function(resolve, reject) {
      resolve(true);
    });
  }

  yes() {
    //this.myPromise.resolve(true);
    this.show = false;
  }

  no() {
    //this.myPromise.reject(false);
    this.show = false;
  }

}

在调用yes()或no()函数时,我需要做出承诺、解决或拒绝。提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-13 18:49:27

你可以用可观察的方法代替承诺。您需要一个简单的主题,它将立即发出并完成(以避免内存泄漏)。代码应该如下所示

代码语言:javascript
复制
export class Component{

  @HostBinding('class.show')
  show: boolean = false;

  private _emitter$ = new Subject<boolean>();

  constructor() { }

  ngOnInit(): void {
    console.log('init');
  }

  public open(): Observable<boolean> {
    return this._emitter.asObservable();
  }

  yes() {
    //this.myPromise.resolve(true);
    this.show = false;
    this.emitAndClose(true);
  }

  emitAndClose(answer:boolean){
     this._emitter.next(answer);
     this._emitter.complete();
  }

  no() {
    this.emitAndClose(false);
    this.show = false;

  }

}

现在,无论何时单击答案,它都会发出值并完成主题,因此不需要在外部取消订阅。

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

https://stackoverflow.com/questions/62362325

复制
相关文章

相似问题

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