【问题标题】:No result displaying firebase datas没有显示 Firebase 数据的结果
【发布时间】:2016-12-16 06:08:48
【问题描述】:

我是 Javascript 和 Ionic 的初学者,我试着简单地显示数据库中的数据。

但是由于各种设备原因,我在执行此操作时无法检查我的控制台。

无论如何,这是我用来显示用户“描述”的代码:

// Get a database reference to our posts
var descriptionRef = new Firebase("https://swapizapplication.firebaseio.com/accounts/-KOkwpzslw9NyUrTtvA7");
// Attach an asynchronous callback to read the data at our posts reference
descriptionRef.on("value", function(snapshot) {
var descriptionSnapshot = snapshot.child("displayDescription");
var description = descriptionSnapshot.val();
  console.log(snapshot.val());
}, function (errorObject) {
  console.log("The read failed: " + errorObject.code);
});

我想要的是,当我在链接到具有该代码的控制器的 html 页面上编写 {{description}} 时,它会在以下位置显示用户“-KOkwpzslw9NyUrTtvA7”的数据库数据“displayDescription”(该用户数据库中字段之一的名称)

但是它不显示数据。页面出现了,没有特别的错误出现,只是数据没有出现。

这是我制作控制器的方法(全视图):

.controller('AccountCtrl', function($scope, $state, $cordovaOauth) {
    $scope.$on('$ionicView.enter', function() {
      //Get logged in user credentials.
      var user = firebase.auth().currentUser;
      var name, email, photoUrl, provider;


            console.log("User: " + JSON.stringify(user));
      if (user != null) {
        name = user.displayName;
        email = user.email;
        photoUrl = user.photoURL;
        provider = user.provider;
        description = user.displayDescription

      }

      //Set Profile Image.
      $scope.profileImage = photoUrl;
      //Set Profile Name.
      $scope.profileName = name;
      //Set Profile email.
        profileEmail = email;
            //Set provider.
            provider = provider;

// Get a database reference to our posts
var descriptionRef = new Firebase("https://swapizapplication.firebaseio.com/accounts/-KOkwpzslw9NyUrTtvA7");
// Attach an asynchronous callback to read the data at our posts reference
descriptionRef.on("value", function(snapshot) {
var descriptionSnapshot = snapshot.child("displayDescription");
var description = descriptionSnapshot.val();
  console.log(snapshot.val());
}, function (errorObject) {
  console.log("The read failed: " + errorObject.code);
});
    });
  });

有什么想法可以帮助 NOOB 吗? :p

编辑:添加我的数据库的 JSON:

{
  "-KOjv0LDdoWrc3uApvPi" : {
    "dateCreated" : "Tue Aug 09 2016 11:29:18 GMT-0400 (EDT)",
    "email" : "bla@blabla.net",
    "provider" : "Facebook",
    "userId" : "FMXlUQZth5aehQLT2TKZZJZdJBh2"
  },
  "-KOkwpzslw9NyUrTtvA7" : {
    "dateCreated" : "Tue Aug 09 2016 16:16:52 GMT-0400 (EDT)",
    "displayDescription" : "no description",
    "email" : "blibli@blibli.com",
    "provider" : "Facebook",
    "userId" : "F9Z7YhSlmAQqOH5FVjBSV2CkYZG3"
  }
}

编辑 2:

我考虑过另一种解决方案,它仍然不想工作!

.controller('AccountCtrl', function($scope, $state, $cordovaOauth) {
    $scope.$on('$ionicView.enter', function() {
    //Get logged in user credentials.
    var user = firebase.auth().currentUser;
    var name, email, photoUrl, provider, description;

    console.log("User: " + JSON.stringify(user));
    if (user != null) {
        name = user.displayName;
        email = user.email;
        photoUrl = user.photoURL;
        provider = user.provider;
    }

    //Set Profile Image.
    $scope.profileImage = photoUrl;
    //Set Profile Name.
    $scope.profileName = name;
    //Set Profile email.
    $scope.profileEmail = email;
    //Set provider.
    $scope.provider = provider;

        var descriptionRef = firebase.database().ref('accounts/' + user + '/displayDescription/' );
        descriptionRef.on('value', function(snapshot) {
        description = snapshot.val();
        $scope.description = description;
        $scope.$apply();
        });
    });

【问题讨论】:

    标签: javascript ionic-framework firebase firebase-realtime-database firebase-authentication


    【解决方案1】:

    要回答这里的主要问题,您没有在 $scope 中公开“描述”,因此 HTML 模板不知道“描述”存在。因此,通过调用{{description}},您可能会得到undefined,这就是它不打印任何内容的原因。

    然后,指的是火力基地。语句firebase.auth().currentUser 返回firebase.Usernull,具体取决于您是否登录。 firebase.User 不包含 provider 的定义。相反,请尝试使用providerIdproviderData。此外,firebase.User 也不包含displayDescription 的定义。这是您在用户数据中为/accounts/-KOkwpzslw9NyUrTtvA7/displayDescription 定义的任意键。

    如果我没记错的话,这应该可以解决问题:

    .controller('AccountCtrl', function($scope, $state, $cordovaOauth) {
        $scope.$on('$ionicView.enter', function() {
        //Get logged in user credentials.
        var user = firebase.auth().currentUser;
        var name, email, photoUrl, provider, description;
    
    
        console.log("User: " + JSON.stringify(user));
        if (user != null) {
            name = user.displayName;
            email = user.email;
            photoUrl = user.photoURL;
            provider = user.providerId;
        }
    
        //Set Profile Image.
        $scope.profileImage = photoUrl;
        //Set Profile Name.
        $scope.profileName = name;
        //Set Profile email.
        $scope.profileEmail = email;
        //Set provider.
        $scope.provider = provider;
    
        // Get a database reference to our posts
        var descriptionRef = new Firebase("https://swapizapplication.firebaseio.com/accounts/-KOkwpzslw9NyUrTtvA7");
        // Attach an asynchronous callback to read the data at our posts reference
        descriptionRef.on("value", function(snapshot) {
            var descriptionSnapshot = snapshot.child("displayDescription");
            description = descriptionSnapshot.val();
            $scope.description = description;
            console.log(snapshot.val());
        }, function (errorObject) {
                console.log("The read failed: " + errorObject.code);
            });
        });
    });
    

    【讨论】:

    • 您好!首先感谢您花时间回答我并使我的代码更美观!我真的很感激:我很乱!然而,结果是一样的......什么都没有出现......很难说可能是什么错误......
    • 小编辑:我添加了我的数据库的 JSON 结构,以防不清楚它是如何制作的
    • 那么可能有几件事。也许是数据库安全规则。或者 .on('value', ...) 没有被调用。由于您不能使用控制台来获取反馈,我建议您使用 HTLM 标记来执行此操作。像这样:<div>{{ output }}</div> 并在控制器中暴露$scope.output 应该可以完成工作。只需将数据附加到您的$scope.output,您就可以获得宝贵的反馈。
    • 谢谢你的帮助,这些都没有用:(
    • 我的规则:{ "rules": { ".read": "auth != null", ".write": "auth != null", "accounts": { ".read" : true, ".write": true, ".indexOn": ["userId", "email"] } } }
    猜你喜欢
    • 2022-08-13
    • 2017-12-13
    • 2021-10-02
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 2020-03-03
    • 2019-10-08
    相关资源
    最近更新 更多