【问题标题】:How to get values and $id from $firebaseArray in angularJS如何从 angularJS 中的 $firebaseArray 获取值和 $id
【发布时间】:2016-12-06 13:15:10
【问题描述】:

您好,我不是 firebase 方面的专家,刚开始工作。在搜索了很多地方后,我找不到解决问题的方法。 My firebase database structure is as follow: 我想检索特定配置文件的数据以及由 firebase 生成的唯一 $id 和。

  $scope.login = function(users)
  {
  firebase.auth().signInWithEmailAndPassword(users.email, users.password)
  .then(function(result)
  {
      var ref = firebase.database().ref("/profiles");
      var examination =  $firebaseArray(ref.orderByChild('uid').equalTo(result.uid));
      console.log(examination);

我得到的结果是 like this 任何人都可以在这方面帮助我,即如何从结果中获取值。提前致谢。

【问题讨论】:

    标签: javascript angularjs firebase firebase-realtime-database


    【解决方案1】:

    如果您想检索数据并将其记录到您的代码中,请不要使用 AngularFire 并坚持使用 JavaScript SDK:

    $scope.login = function(users) {
      firebase.auth().signInWithEmailAndPassword(users.email, users.password)
      .then(function(result) {
        var ref = firebase.database().ref("/profiles");
        var examination = ref.orderByChild('uid').equalTo(result.uid);
        examination.on('value', function(snapshot) {
          console.log(snapshot.val());
        });
    

    您会注意到我添加了on('value',这是您告诉 Firebase SDK 开始从数据库加载数据的方式。 Firebase documentation for web developers 涵盖了这一点以及更多内容,我强烈建议您端到端阅读。在那里度过几个小时,会比你想象的更多的问题。

    如果您更喜欢坚持使用 AngularFire,那么您应该停止使用 console.log 来检查加载状态。来自AngularFire quickstart

    ...$scope.data 将从远程服务器填充。这是一个异步调用,因此数据在控制器中可用之前需要一些时间。虽然在下一行放置 console.log 以读取结果可能很诱人,但数据尚未下载,因此该对象将显示为空。

    相反,您可以直接在 HTML 模板中显示数据:

    记录数据的最简单方法是使用 Angular 的 json 过滤器在视图中打印它。 AngularFire 会告诉 Angular 编译器何时完成加载数据,因此无需担心何时可用。

    <pre>{{ data | json }}</pre>
    

    最后一个 sn-p 来自 AngularFire 指南中的 handling asynchronous operations

    【讨论】:

      【解决方案2】:

      使用$loaded() promise 查看值:

       $scope.login = function(users)
        {
        firebase.auth().signInWithEmailAndPassword(users.email, users.password)
        .then(function(result)
        {
            var ref = firebase.database().ref("/profiles");
            var examination =  $firebaseArray(ref.orderByChild('uid').equalTo(result.uid));
            //console.log(examination);
            examination.$loaded().then(function (exam) {
                console.log(exam);
            });
      

      重要的是要意识到调用$firebaseArray 方法会立即返回一个空数组。从服务器返回数据后,现有引用将填充实际数据。

      $loaded() 方法返回一个承诺,该承诺在从数据库下载数组数据时解决。承诺解析为$firebaseArray

      【讨论】:

        猜你喜欢
        • 2017-10-21
        • 1970-01-01
        • 1970-01-01
        • 2016-10-28
        • 1970-01-01
        • 2014-03-31
        • 2016-06-06
        • 1970-01-01
        • 2019-08-16
        相关资源
        最近更新 更多