AngularFire: Как лучше всего тестировать, если $ firebaseObject не имеет ключей?

0

Простой объект JavaScript пуст (= не имеет ключей), когда angular.equals({}, myObj) === true.

Есть ли какая-нибудь функция полезности для обнаружения, если у $firebaseObject нет ключей? Он никогда не будет равен {} потому что он выглядит так:

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

EDIT: Я пытаюсь скрыть <div> когда $firebaseObject не имеет данных. Кажется, что это делает трюк, но я не знаю, правильно ли это решение:

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

[...]

</div>

Из документа:

Если значение в базе данных является примитивным (логическое, строковое или числовое), тогда значение будет храниться под этим ключом $value. Изменение этого значения, а затем вызов $save() также обновит значение сервера.

Обратите внимание, что в любое время существуют другие ключи, которые будут игнорироваться. Чтобы изменить объект на примитивное значение, удалите остальные ключи и добавьте этот ключ к объекту.

[...]

У моего $firebaseObject есть такие дети:

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

Когда я играл с $value я нашел это:

  • Когда $firebaseObject не имеет дочернего $firebaseObject, $value null
  • Когда $firebaseObject имеет один ребенок, $value - его ключ
  • Когда $firebaseObject имеет более одного ребенка, $value содержит все дочерние объекты

Вопрос в том, могу ли я использовать $value таким образом, чтобы решить мою проблему, или это невозможно, потому что...?

  • 0
    Похоже, проблема XY ( meta.stackexchange.com/questions/66377/what-is-the-xy-problem ). Можете ли вы поделиться тем, что вы пытаетесь достичь, и кодом, который вы пробовали?
  • 0
    Похоже, правильное решение для меня. Хотя я бы пошел на нг-шоу = "myObj"
Показать ещё 2 комментария
Теги:
firebase
angularfire

1 ответ

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().

  • 0
    О, ng-show="vm.users" показывает div если vm.users не имеет данных? Почему? Я бы принял противоположное поведение. Кстати, он хорошо работает с $firebaseObject - почему $firebaseArray лучше?
  • 0
    Я не копал слишком глубоко, просто обновил его до того, что я делаю здесь: trenches.firebaseapp.com

Ещё вопросы

Сообщество Overcoder
Наверх
Меню