查看号码是否在Firebase中

时间:2015-05-31 17:25:47

标签: javascript jquery angularjs firebase angularfire

所以我有一个注册用户的表单,

             <form class="" ng-submit="vm.passwordRegister()">
                <div class="panel panel-default">
                    <div class="panel-heading">
                        Register
                    </div>
                    <div class="panel-body">
                        <div class="form-group">
                            <input type="text" ng-model="vm.number" class="form-control" placeholder="Client Number" ng-Blur="vm.numberCheck()"/>
                        </div>
                        <div class="form-group">
                            <input type="text" ng-model="vm.name" class="form-control" placeholder="Your Name" />
                        </div>
                        <div class="form-group">
                            <input type="text" ng-model="vm.email" class="form-control" placeholder="E-mail Address" />
                        </div>
                        <div class="form-group">
                            <input type="password" ng-model="vm.password" class="form-control" placeholder="Password" />
                        </div>
                        <div class="form-group">
                            <input type="password" ng-model="vm.secret" class="form-control" placeholder="Account Secret" />
                        </div>
                    </div>
                    <div class="panel-footer clearfix">
                        <button type="submit" class="btn btn-primary pull-right" ng-if="AccountOpen.$value">Register <i class="fa fa-arrow-right"></i></button>
                        <button type="submit" class="btn btn-primary pull-right" ng-if="!AccountOpen.$value" disabled>Register Disabled</button>
                    </div>
                </div>
            </form>

用户在表单开头输入客户编号,在表单末尾输入密码。

最后,我想在创建用户之前确定两件事。

1. The customer number exists in Firebase
2. The secret matches the customer number entered

现在我尝试做的就是调用一个函数vm.numberCheck()来检查客户编号或number是否存在,如果是,则返回快照或snap到用户。然后我会在html端将该字段标记为有效并允许表单提交。

我的功能如下所示:

    vm.numberCheck = function ($scope, $vm, $window) {

        ref.child('clientNumbers').startAt(vm.number).endAt(vm.number).once('value', function(snap) {
            console.log('accounts matching customer number', snap.val());
        });

    }

我返回数据的唯一方法是只需单击数字字段并模糊而不键入任何内容(提供空查询)如果我在字段中键入任何内容,即使它是从firebase复制并粘贴它返回null 。

我做错了什么?

我创建了一个JSFIDDLE,并添加了我能想到的所有内容,但它仍然无法运行。但这里是:https://jsfiddle.net/05dds4v3/5/连接到我创建的测试firebase应用程序。

1 个答案:

答案 0 :(得分:2)

我创建了一个工作的jsbin,它显示了如何检测列表中是否存在数字:http://jsbin.com/pesimo/1/edit?js,output

关键功能是:

function checkIfNumberExists(number) {
  log('Checking if '+number+' exists, this may take a moment');
  ref.child('clientNumbers').child(number).once('value', function(snapshot) {
    log('Got a value, let\'s see if the number exists');
    if (snapshot.val() === null) {
      log('Our number does not yet exist, let\'s create it');
      ref.child('clientNumbers').child(number).set(true, function(error) {
        if (error) {
          log('Error creating number: '+error.toString());
        } 
        else {
          log('Number created, check if it exists now\n');
        }
      });
    }
    else {
      log('Yes, our number exists\n');
    }
  });
}

请注意,我没有创建AngularJS,也没有创建AngularFire和jQuery,因此解决方案主要关注于检测特定子节点是否存在。这通常是隔离问题的关键(也是提供mcve的步骤之一)。通过将问题简化为核心,您可以找到问题的原因,也可以让人们尽可能轻松地帮助您(因为他们需要调试更少的技术)。