Firebase / Angular JS показывает только записи Firebase, созданные зарегистрированным пользователем

0

Прямо сейчас у меня есть таблица, которая в настоящее время показывает все записи, которые образуют узел событий в firebase.

Тем не менее, я хочу показать события, созданные зарегистрированным пользователем. Сейчас они показывают события, созданные всеми пользователями.

Я предполагаю, что я смогу использовать директиву ng-if после ng-repeat в теге, однако я не уверен, что добавить в него.

Это моя таблица:

<table class="table table-striped">
<thead>
  <tr>
    <th>Title</th><th>Location</th> <th>Actions</th>
  </tr>
</thead>
<tbody>
  <tr scope="row" ng-repeat="event in events | reverse" >
    <td>{{event.title}}</td>
    <td>{{event.location}}</td>
    <td><button class="btn btn-primary" ng-click="events.$remove(event)"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></button></td>
  </tr> 

</tbody>

Пользовательский объект выглядит так:

{
"provider": "password",
"uid": "635gt3t5-56fe-400d-b50b-1a6736f8874a",
"token":
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6Im1pY2hhZWwubGFyaXZpZXJlMTk3M0BnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImlhdCI6MTQ2OTEyNTYyOSwidiI6MCwiZCI6eyJwcm92aWRlciI6InBhc3N3b3JkIiwidWlkIjoiNmY5ZmM0NTUtNTZmZS00MDBkLWI1MGItMWE2NzM2Zjg4NzRhIn19.yIzzV7Or7tUlXi-sSWeioNx6LLoQ0U9qnW1X06rpSmA",
"password": {
"email": "[email protected]",
"isTemporaryPassword": false,
"profileImageURL": "https://secure.gravatar.com/avatar/5f9effbf8cbea69792c595079cf25d38?d=retro"
},
"auth": {
"provider": "password",
"uid": "635gt3t5-56fe-400d-b50b-1a6736f8874a",
"token": {
  "email_verified": false,
  "email": "[email protected]",
  "exp": 1469212029,
  "iat": 1469125629,
  "sub": "635gt3t5-56fe-400d-b50b-1a6736f8874a",
  "auth_time": 1469125629,
  "firebase": {
    "identities": {
      "email": [
        "[email protected]"
      ]
    }
  }
}
},
"expires": 1469212029
}

Мой контроллер выглядит так:

angular.module('myApp').controller('ChatCtrl', function($scope, user,
Ref, $firebaseArray, $timeout) {

console.dir('user: ' + JSON.stringify(user));

// synchronize a read-only, synchronized array of events, limit to most recent 10
$scope.events = $firebaseArray(Ref.child('events').limitToLast(10));
// display any errors
$scope.events.$loaded().catch(alert);

// provide a method for adding a event
$scope.addEvent = function(newEvent) {


    if (newEvent) {
        // push a event to the end of the array
      $scope.events.$add({
        title:     newEvent.title,
        location:  newEvent.location,
        createdBy: user.uid,
        createdAt: Firebase.ServerValue.TIMESTAMP
      })
      // display any errors
            .catch(alert);
    }

  };

function alert(msg) {
    $scope.err = msg;
    $timeout(function() {
        $scope.err = null;
      }, 5000);
  }
});

Это то, что пользователи и события выглядят в firebase:

Изображение 174551

Теги:
firebase
firebase-realtime-database

1 ответ

1
Лучший ответ

Чтобы получить результаты, которые вы ищете, попробуйте использовать угловой фильтр.

В контроллере добавьте функцию, называемую

$scope.filterByUID = function(event) {
    if (event.createdBy === user.uid) {
        return true;
    }
    return false;
}

Эта функция будет действовать как фильтр, который пропускает только события, которые были созданы текущим пользователем, путем сравнения созданного событияBy с пользовательским uid.

Затем измените эту строку в html

<tr scope="row" ng-repeat="event in events | reverse" >

к

<tr scope="row" ng-repeat="event in events | reverse | filter:filterByUID" >

Это говорит о том, что вы хотите, чтобы ваши элементы были фильтрованы с фильтром, который мы определили в контроллере.

Изменение: здесь ссылка на использование пользовательских фильтров: AngularJS: Пользовательские фильтры и ng-repeat

  • 0
    Я попытался поместить эту функцию в свой контроллер, но эта функция, похоже, не вызывается. Я добавил console.log (); внутри оператора if и вне оператора it, внутри функции, и в консоли ничего не появляется. var filterByUID = function(event) { if (event.createdBy === user.uid) { console.log("if condition met"); return true; } console.log("if condition NOT met"); return false; }; Все события по-прежнему отображаются независимо от того, какой пользователь их создал.
  • 0
    Я получил его на работу с помощью: $scope.filterByUID = function(event) {...
Показать ещё 1 комментарий

Ещё вопросы

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