【问题标题】:Firebase, getting an object after a searchFirebase,搜索后获取对象
【发布时间】:2016-06-20 12:40:29
【问题描述】:

您好,我的目标是测试是否存在具有 $scope.CodeBarre 值的员工,并将其放入我的 FIREBASE 数据库中,然后,如果 $CodeBarre 存在,程序将打开一扇门。 $CodeBarre 变量来自 USB 条形码扫描,它将扫描员工 CardId...

这是我的实际代码:

  /* TEST DU CODE BARRE EN LIGNE */
 $scope.CodeBarre="GA13081982";
function testerLeCodebarre() {

    var ref = new Firebase('https://blinding-heat-8502.firebaseio.com/employes').orderByChild("identifiant").equalTo($scope.CodeBarre);
    $scope.employe = $firebaseArray(ref);

    console.log($scope.employe);
} 

我在 $scope.employe 的数组中获取对象,如下所示:

我得到了合适的员工,但之后不可能让它在 angularJs 视图中工作,我根本无法通过键入 $scope.employe[0].nom 来获取员工的姓名。 p>

注意:如果没有找到员工,那么firebase返回的数组不是空的,但我根本找不到员工对象....

我也尝试过使用 $firebaseObject,但我无法获得常规的 AngularJs 对象。

请帮忙谢谢

这就是我的模板的样子:

<div class="row">
        Bienvenue, {{employe.prenom}} {{employe.nom}}
</div>
  1. 尝试使用 $firebaseObject:

当我输入这个,试图获取一个对象而不是一个数组时,它很好地找到了员工,但问题是我无法在我的模板中访问它,因为我事先不知道 $ID (此 $ID 由 Firebase 生成):

/* TEST DU CODE BARRE EN LIGNE */

函数测试器LeCodebarre() {

var ref = new Firebase('https://blinding-heat-8502.firebaseio.com/employes').orderByChild("identifiant").equalTo($scope.CodeBarre);
$scope.employe = $firebaseObject(ref);
console.log($scope.employe);

}

这就是我进入 Firebug 的原因:

[获取一个对象时的萤火虫][2]

我的愿望只是用我从 firebase 获得的具有 $id -KIcVJh9sdVSWMamGaA3 的对象填充 $scope.employe,但我真的不知道该怎么做。

编辑:所以它很适合这个:

    var ref = new Firebase('https://blinding-heat-8502.firebaseio.com/employes').orderByChild("identifiant").equalTo($scope.CodeBarre).once("value", function(snapshot) {
   var data = snapshot.val(); 
   if (data){
       console.log(data);

     //employee exists
     $scope.employe = data;
     console.log($scope.employe);
   }

但是 $scope.employe = data 在我的模板中不起作用:

<div class="row">
        Bienvenue, {{employe.prenom}} {{employe.nom}}
</div>

我仍然无法访问该对象,另外考虑到我不知道 $id 提前:

Object returned by firebase

我尝试输入我的控制器 data.nomdata.age 但未定义。 我也试过 $scope.employe = data.nom;但未定义

【问题讨论】:

  • 如果您只是在模板中执行:{{ employe.age }} 会发生什么?使用firebaseObject() 很好,因为您的目标是只检索一个项目。然后,如果您检索对象,则不必使用项目上的索引来获取项目。只需执行{{ employe.age }} {{ employe.addrese }} 等。
  • 你好,好的,我现在要试试这个,然后告诉你。
  • 这个$scope.CodeBarre 是唯一的吗?
  • Hem 不,它来自 USB 条形码扫描仪,每次都不一样 hi hi。
  • @JojoBebert 我的建议有用吗?

标签: angularjs firebase


【解决方案1】:

正如我所见,您将始终检索一名员工,因此在您的情况下无需使用 $firebaseArray。只需:

var ref = new Firebase('https://blinding-heat-8502.firebaseio.com/employes').orderByChild("identifiant").equalTo($scope.CodeBarre).on("child_added", function(snapshot) {
   var data = snapshot.val(); 
   if (data){
     //employee exists
     $scope.employe = data;
   }
});

【讨论】:

  • 非常感谢!我会试试这个,让你知道,我不知道如何表达我的感激之情
  • 它工作得很好,并返回一个带有 $id 的对象名称,不幸的是,$scope.employe = data 不返回数据,我正在发布图片
  • @JojoBebert 我的错。刚刚编辑了代码。使用child_added 重试。
  • 由于 Firebase 和 $digest 异步性质,这将无法正常工作。我建议使用$firebaseObject()
  • @adolfosrs Angular 使用$digest 循环来保持模型和视图同步。当它们不同步时,Angular 会运行循环。来自外部库的异步操作不会触发此循环。这就是我们构建 AngularFire 的原因。
猜你喜欢
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 2018-11-11
  • 1970-01-01
  • 2016-11-23
  • 2015-12-15
相关资源
最近更新 更多