【问题标题】:AngularJS - ValueChanges only first imeAngularJS - ValueChanges 只有第一次
【发布时间】:2017-09-04 17:18:48
【问题描述】:

我正在开发 AngularJS PWA 应用程序(在我的注册组件中有表单)

表格有 3 个步骤:

第 1 步

  • 名字
  • 姓氏
  • 电子邮件
  • 密码
  • 电话号码

第 2 步

  • 示例
  • 示例

第 3 步

  • 示例
  • 示例

当我的用户完成第一步时,我有单选按钮:

 <div class="radio">
        <label><input type="radio" name="step2" formControlName="step2" value="1"> Fortsæt</label>
        <label><input type="radio" name="step2" formControlName="step2" value="2"> Ring mig op</label>
 </div>

代码:

this.rForm.get('step2').valueChanges.subscribe(
    (step2) => {
        // here I have user registration width angularfire2
        this.afAuth.auth.createUserWithEmailAndPassword(email, password).then(function(user) {
    }
});

当用户单击其中一个单选按钮时,此代码将在 firebase 中注册用户,但如果用户再次单击第二个单选按钮,代码将尝试再次注册用户,我的控制台中出现错误(电子邮件已经退出......) .

对此有什么解决方案?我只想注册用户第一次触摸单选按钮。我这里没有使用提交,因为我还有其他字段和步骤。我只想注册用户第一步。

【问题讨论】:

    标签: angular


    【解决方案1】:

    您可以使用firsttake 运算符

    import 'rxjs/add/operator/first';
    
    this.rForm.get('step2').valueChanges.first().subscribe(
    
    this.rForm.get('step2').valueChanges.take(1).subscribe(
    

    另见Angular 2 using RxJS - take(1) vs first()

    【讨论】:

    • 当 .valueChanges.first.subscribe 出现错误:roperty 'subscribe' 不存在于类型 '{ (this: Observable, predicate: (value: T ,索引:数字,来源:Observable
    • 对不起,first 是一个函数,而不是一个属性。我忘了()
    • 这行得通,但现在我有一个小问题:第一次点击 step2 = 1 第二次点击 step2=2 所以如果 step2=2 我正在显示另一个表单输入,但是宽度这个代码第二次点击不起作用不再
    • 抱歉,我好像没听懂你的最后评论。或许您需要在点击后再次拨打this.rForm.get('step2').valueChanges.subscribe(...
    猜你喜欢
    • 2023-01-21
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多