Не работает список базовых баз NativeScript Angular 2

#listview #angular #firebase #firebase-realtime-database #nativescript

#listview #angular #firebase #firebase-база данных в реальном времени #nativescript

Вопрос:

Пытаюсь обновить список с содержимым моей базы данных firebase.

Почему-то это не работает, я использую плагин firebase от eddy verbruggen. Плагин работает, но я не могу отобразить его в списке.

home.component.ts

 import { Component, ElementRef, OnInit, ViewChild } from "@angular/core";
import firebase = require("nativescript-plugin-firebase");

@Component({
  selector: "home",
  templateUrl: "pages/home/home.component.html"
})
export class HomeComponent implements OnInit {

  meting: Array<Object> = [];

  ngOnInit() {
    this.fbGetData();
  }

  public onItemTap(args) {
        console.log("------------------------ ItemTapped: "   args.index);
    }

  fbGetData(){
  var onChildEvent = (result) => {
   console.log("Value: "   JSON.stringify(result.value));  // <-- works
    this.meting.unshift(result.value);
  };  
  // listen to changes in the /users path
  firebase.addChildEventListener(onChildEvent, "/user0").then(
    (listenerWrapper) => {
      var path = listenerWrapper.path;
      var listeners = listenerWrapper.listeners; // an Array of listeners added
      // you can store the wrapper somewhere to later call 'removeEventListeners'
  }
  );
  }  
}
  

home.component.html

     <ListView [items]="meting" (itemTap)="onItemTap($event)">
    <template let-item="item" let-i="index" let-odd="odd" let-even="even">
        <StackLayout [class.odd]="odd" [class.even]="even">
            <Label [text]='"Week: "   i'></Label>
            <Label [text]='"Gewicht: "   item.gewicht   ", Middel: "   item.middel   ", Heup: "   item.heup'></Label>
        </StackLayout>
    </template>
</ListView>
  

база данных firebase:

 user0
    week0
        gewicht: 86
        heup: 78
        middel: 78
    week1
        gewicht: 85
        heup: 76
        middel: 74
  

Ответ №1:

Когда я использую вашу fbGetData() функцию в своей собственной программе, она работает. Я не уверен, насколько вы новичок в firebase, но первое, что я бы проверил, это то, что в консоли firebase в разделе database есть вкладка правил. Здесь вам нужно ввести правила чтения и записи. Вы можете найти документацию по этой ссылке firebase. для этих правил существует иерархия. Поэтому важно их понимать. Это может легко быть тем, что блокирует ваш код.

способ проверить это — установить для ваших правил следующее:

 {
  "rules": {
    "user0": {
      ".read": true,
      ".write": true
    }
  }
}
  

Это предоставит доступ для чтения и записи к вашему узлу «user0». Вы не хотите использовать этот код в разработке, в то время как любой может читать или записывать ваши данные.

для доступа к корневому узлу просто добавьте свои правила чтения и записи в корневой узел следующим образом.

 {
  "rules": {
    ".read": true,
    ".write": true
  }
}
  

Если не по этой причине, дайте мне знать.