AngularFire:测试$ firebaseObject没有密钥的最佳实践是什么?

时间:2015-09-28 15:24:07

标签: angularjs firebase angularfire

angular.equals({}, myObj) === true时,简单JavaScript对象为空(=没有键)。

是否有一些实用功能可以检测$firebaseObject是否没有密钥?它永远不会等于{},因为它看起来像这样:

{
   $$conf: Object,
   $id: "objectId",
   $priority: null,
   $value: null
}

编辑:我在<div>没有数据时试图隐藏$firebaseObject。看起来好像这样做但我不知道它是否是正确的解决方案:

<div ng-hide="myObj.$value === null">

[...]

</div>

来自the doc

  

如果数据库中的值是基元(布尔值,字符串或   数字)然后该值将存储在此$value键下。修改   此值然后调用$save()也将更新服务器   值。

     

请注意,只要存在其他密钥,就会忽略此密钥。至   将对象更改为原始值,删除其他键并添加   这个对象的关键。

     

[...]

我的$firebaseObject有这样的孩子:

key: {
   value1: 'something',
   value2: 'something'
}

当我和$value玩游戏时,我发现了这个:

  • $firebaseObject没有孩子时,$valuenull
  • $firebaseObject有一个孩子时,$value是其关键
  • $firebaseObject有一个以上的孩子时,$value包含所有子对象

问题是,我可以用$value这种方式来解决我的问题,还是因为......?

1 个答案:

答案 0 :(得分:1)

因为这是绑定控制器中数据的方式:

function MainController($firebaseObject) {
  var ref = new Firebase('https://yours.firebaseio.com');
  vm.users = $firebaseObject(ref.child('users'));

这适用于show / hide:

<div class="small-12 column" ng-show="vm.users">
  <h1>No user</h1>
</div>
<div class="small-12 column" ng-show="!vm.users">
  <h1>Users</h1>
  <ul>
    <li ng-repeat="user in vm.users">{{user}}</li>
  </ul>  
</div>

顺便说一下:由于您使用的是ng-repeat用户,因此您需要将其设为$firebaseArray()