查看数字是否在 Firebase 中

See if number is in Firebase

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

             <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 是否存在,如果存在 returns 快照或 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 复制和粘贴的也是如此returns 空。

我做错了什么?

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

我创建了一个工作 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 的步骤之一)。通过将问题简化为核心,您将找到问题的原因,或者让人们尽可能容易地帮助您(因为他们需要调试的技术更少)。