GVKun编程网logo

Angular JS firebase。(child_added)未在页面上呈现(在当前页面)

4

在这篇文章中,我们将带领您了解AngularJSfirebase。的全貌,包括child_added未在页面上呈现的相关情况。同时,我们还将为您介绍有关android–FirebaseonChildA

在这篇文章中,我们将带领您了解Angular JS firebase。的全貌,包括child_added未在页面上呈现的相关情况。同时,我们还将为您介绍有关android – Firebase onChildAdded用于新数据、angular 6,build无法在Firebase托管上加载图片、Angular JS firebase(child_added)未在页面上呈现、Angular Material 2数据表连接到AngularFire2或Firebase服务?的知识,以帮助您更好地理解这个主题。

本文目录一览:

Angular JS firebase。(child_added)未在页面上呈现(在当前页面)

Angular JS firebase。(child_added)未在页面上呈现(在当前页面)

我的Firebase数据库中有一些条目,这些条目正试图显示在html页面上。console.log显示数据库中的子级,但未显示在页面上。这是我的代码:

D B:

quiz-show      user        -JuYaVjjm0zY59vK48aR: "user1"        -JuYaXzrT2-_pfhpr58o: "user2"        -JuYaZd_oS-hi5zqYLhX: "user3"        -JuYaaNNd24Icruv18LH: "user4"

控制器:

''use strict'';angular.module(''phoneQuizAnswer'')    .controller(''testCtrl'', function ($scope, $firebaseObject) {        var fireRef = new Firebase(''https://[myfirebase]/users'');        $scope.h1 = ''responses:'';        fireRef.on(''child_added'', function(childSnapshot, prevChildKey) {            console.log(childSnapshot.val());            $scope.users = childSnapshot.val();        });    });

HTML:

{{h1}}{{users}}

console.log显示

user1user2user3....

{{h1}}正确渲染,但{{users}}不渲染任何东西。那么如何让每个人都显示在页面上?

答案1

小编典典

Firebase异步加载和监视数据。只要有(新的或更新的)数据,就会触发您的回调函数。不幸的是,那时AngularJS通常不准备接受更改。这就是Firebase创建AngularFire的原因,当发生更改时,它会自动通知AngularJS。

您似乎部分使用了AngularFire,但没有使用此构造。我建议_始终_将AngularFire用于需要绑定到的数据,$scope _或者永远不要_使用AngularFire。选择是您的,但要保持一致。

使用AngularFire:

        var fireRef = new Firebase(''https://[myfirebase]/users'');        $scope.h1 = ''responses:'';        $scope.users = $firebaseArray(fireRef);

不使用AngularFire:

        var fireRef = new Firebase(''https://[myfirebase]/users'');        $scope.h1 = ''responses:'';        fireRef.on(''value'', function(childSnapshot, prevChildKey) {          $timeout(function() {            console.log(childSnapshot.val());            $scope.users = childSnapshot.val();          };        });

$timeout结构告诉AngularFire您正在修改$scope

请注意,我们拥有的每一份AngularFire文档中都涉及到将数组绑定到作用域:AngularFire快速入门,AngularFire指南和AngularFire
API文档。请阅读它们,它们包含许多其他有用的位。

android – Firebase onChildAdded用于新数据

android – Firebase onChildAdded用于新数据

如果我的firebase引用中存储了50,000个项目的列表,并且自上次客户端在线和侦听以来已经将5个项目添加到该列表中,那么我必须使用哪个回调才会触发5已添加的新项目?

我在我的客户端上使用Firebase.getDefaultConfig()启用了离线持久性.setPersistenceEnabled(true);.我有一个监听器绑定到一个活动,听取孩子们添加到参考.每次为onChildAdded创建活动时,都会为引用中的所有数据调用.有可能只为我的本地缓存和firebase服务器上的数据之间的“diff”调用onChildAdded和onChildRemoved吗?或者如果那是不可能的,那么在firebase的最新更新之后只触发那些onChild *回调?

解决方法:

Everytime the activity is created onChildAdded is called for all the data in the reference. Is it possible to make onChildAdded and onChildRemoved be called only for “diff” between my local cache and the data on the firebase server?

不,这是不可能的.从documentation on event types:

child_added is triggered once for each existing child and then again every time a new child is added to the specified path

现在回到你最初的问题:

which callback would I have to use such that it is only triggered for the 5 new items that have been added?

那将是:

ref.limitToLast(5)...

但这要求您知道自上次收听以来已将多少项添加到列表中.

更常见的解决方案是跟踪您已经看过的最后一项,然后使用startAt()开始触发您上次所在位置的事件:

ref.orderByKey().startAt("-Ksakjhds32139")...

然后,您将保留您在共享首选项中看到的最后一个密钥.

同样,您可以通过以下方式保持上次活动可见:

long lastActive = new Date().getTime();

然后将Firebase.ServerValue.TIMESTAMP的时间戳添加到每个项目,然后:

ref.orderByChild("timetstamp").startAt(lastActive+1)...

angular 6,build无法在Firebase托管上加载图片

angular 6,build无法在Firebase托管上加载图片

将angular应用程序部署到firebase托管后,我无法从assets文件夹加载图像. (build –prod)
当在localhost上运行时,图像显示.
所有其他东西都正确加载.
这是我的包json
cli:~6.2.0-beta.2
firebase-tools:4.1.0

{
  "name": "protocols","version": "0.0.0","scripts": {
    "ng": "ng","start": "ng serve","build": "ng build","test": "ng test","lint": "ng lint","e2e": "ng e2e","deploy": "ng build --prod && firebase deploy"
  },"private": true,"dependencies": {
    "@angular/animations": "^6.1.2","@angular/cdk": "^6.4.5","@angular/common": "^6.1.0","@angular/compiler": "^6.1.0","@angular/core": "^6.1.0","@angular/forms": "^6.1.0","@angular/http": "^6.1.0","@angular/material": "^6.4.5","@angular/platform-browser": "^6.1.0","@angular/platform-browser-dynamic": "^6.1.0","@angular/pwa": "^0.8.0-beta.2","@angular/router": "^6.1.0","@angular/service-worker": "^6.1.0","angularfire2": "^5.0.0-rc.11","core-js": "^2.5.4","firebase": "^5.3.1","hammerjs": "^2.0.8","mat-progress-buttons": "^6.0.1","rxjs": "^6.0.0","zone.js": "~0.8.26"
  },"devDependencies": {
    "@angular-devkit/build-angular": "~0.8.0-beta.0","@angular/cli": "~6.2.0-beta.2","@angular/compiler-cli": "^6.1.0","@angular/language-service": "^6.1.0","@types/jasmine": "~2.8.8","@types/jasminewd2": "~2.0.3","@types/node": "~8.9.4","codelyzer": "~4.3.0","jasmine-core": "~2.99.1","jasmine-spec-reporter": "~4.2.1","karma": "~1.7.1","karma-chrome-launcher": "~2.2.0","karma-coverage-istanbul-reporter": "~2.0.1","karma-jasmine": "~1.1.2","karma-jasmine-html-reporter": "^0.2.2","protractor": "~5.4.0","ts-node": "~7.0.0","tslint": "~5.11.0","typescript": "~2.9.2"
  }
}

在appComponent上尝试过

<img src="../assets/image.jpg">
<img src="/assets/image.jpg">
<img src="assets/image.jpg">

这一切都没有.

在firebase.json托管设置

"hosting": {
"public": "dist","ignore": [
  "firebase.json","**/.*","**/node_modules/**"
],"rewrites": [
  {
    "source": "**","destination": "/index.html"
  }
]

}

在firebase上有一些技巧吗?重写?有人可以帮助我!

解决方法

在firebase部署之后,现在从角度6.1.3中的资产加载图像!终于找到了解决方案,它对我有用.问题是tsconfig.json更改:

"outDir": "./dist/out-tsc",

至:

"outDir": "./dist",

Angular JS firebase(child_added)未在页面上呈现

Angular JS firebase(child_added)未在页面上呈现

我的Firebase数据库中有一些条目,这些条目正试图显示在html页面上。console.log显示数据库中的子级,但未显示在页面上。这是我的代码:

D B:

quiz-show  
    user
        -JuYaVjjm0zY59vK48aR: "user1"
        -JuYaXzrT2-_pfhpr58o: "user2"
        -JuYaZd_oS-hi5zqYLhX: "user3"
        -JuYaaNNd24Icruv18LH: "user4"

控制器:

'use strict';

angular.module('phoneQuizAnswer')
    .controller('testCtrl',function ($scope,$firebaseObject) {
        var fireRef = new Firebase('https://[myfirebase]/users');
        $scope.h1 = 'responses:';
        fireRef.on('child_added',function(childSnapshot,prevChildKey) {
            console.log(childSnapshot.val());
            $scope.users = childSnapshot.val();
        });
    });

HTML:

{{h1}}
{{users}}

console.log显示

user1
user2
user3
....

{{h1}}正确渲染,但{{users}}不渲染任何东西。那么如何让每个人都显示在页面上?

Angular Material 2数据表连接到AngularFire2或Firebase服务?

Angular Material 2数据表连接到AngularFire2或Firebase服务?

我希望它只是即插即用:-)我一直在喋喋不休地打了几个小时没有我的小实验工作. md数据表是新的,因此Web上几乎没有神圣的知识.找到将Firebase连接到桌面的好方法将是一个良好的开端.有任何想法吗?

目前我有这个设置.我的代码工作得很好,没有带有标准Angular设置和代码的表,使用ngFor并从模板创建列表.所以代码使用AngularFire 2从Firebase传递数据.尝试新的md数据表就是问题所在.

首先,模板不会渲染.我知道我已经正确设置了NgModule,所以我怀疑数据源没有连接并且创建了这个错误.这是Chrome控制台中的错误.

Template parse errors:
Can't bind to 'dataSource' since it isn't a kNown property of 'md-table'.
1. If 'md-table' is an Angular component and it has 'dataSource' input,then verify that it is part of this module.

我的members- search.component.html看起来与官方文档相同,只是我更改了模板绑定:

<md-table #table [dataSource]="dataSource">

<ng-container cdkColumnDef="memberName">
    <md-header-cell *cdkHeaderCellDef> Name </md-header-cell>
    <md-cell *cdkCellDef="let row"> {{member.firstName}} {{ member?.lastName }} </md-cell>
</ng-container>

members-search.component.ts包含以下相关部分:

import { DataSource } from '@angular/cdk';

@Injectable()
export class MembersAdminService {

  private members$: FirebaseListObservable<Member[]>;
  private dataSource: DataSource<any>;

  constructor(
      private af: AngularFireDatabase,@Inject(FirebaseApp) fb) {
        this.members$= af.list('Members');
  }

我将这些数据表函数放入members-search.service.ts中的工作代码中,并在connect()中使用了与我在其他地方使用的相同代码.

// md table dataSource functions.
  public connect(): FirebaseListObservable<any> {
    return this.af.list('Members',{
        query: {
            orderByChild: 'lastName'
        }
    });
    // return this._exampleDatabase.dataChange;
  }

  public disconnect() {}

数据表docs和plunker在组件中创建了一个数据源和数据库,但是如果我已经拥有Firebase,那么大多数情况似乎都没有必要.我正在学习所有这些,所以我在任何事情上都不是专家,也许我错过了一些东西.

如果您之前没有进入这个新设置,那么这里是文档. md表构建在cdk表的顶部,为cdk表提供样式.

https://material.angular.io/components/table/overview

https://material.angular.io/guide/cdk-table

我在为MD数据表使用MD Paginator时添加了连接到Firebase的代码. Paginator使服务中的代码更加复杂.大多数代码都在它所属的服务中.请享用!

成员admin.service.ts

import { AngularFireDatabase,FirebaseListObservable } from 'angularfire2/database';
import { FirebaseApp } from 'angularfire2';
import { Inject,Injectable } from '@angular/core';

import { MemberModel } from './member-admin.model';
import { SuccessService } from '../../../shared/success.service';

// Data Table imports.
import { MdPaginator } from '@angular/material';
import { DataSource } from '@angular/cdk';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import 'rxjs/add/operator/startWith';
import 'rxjs/add/observable/merge';
import 'rxjs/add/observable/combineLatest';
import 'rxjs/add/operator/map';


@Injectable()
export class MembersAdminService {

  private membersData$: FirebaseListObservable<MemberModel[]>;

  constructor(
    public af: AngularFireDatabase,private successService: SuccessService,// For Create and Update functions.
    @Inject(FirebaseApp) fb) {
      this.membersData$= af.list('Members');
    }

// ... CRUD stuff not relevant to the MD Table ...


// *** MD DATA TABLE SERVICES. ***


@Injectable()
export class MemberDatabase {

    /* Stream that emits whenever the data has been modified. */
    public dataChange: BehaviorSubject<MemberModel[]> = new BehaviorSubject<MemberModel[]>([]);
    get data(): MemberModel[] {
        return this.dataChange.value; }

    // Connection to remote db.
    private database = this.memberAdminService.af.list('Members',{
        query: {
            orderByChild: 'lastName'
        }
    });
    public getMembers(): FirebaseListObservable<MemberModel[]> {
        return this.database;
    }


    constructor(private memberAdminService: MembersAdminService) {
        this.getMembers()
            .subscribe(data => this.dataChange.next(data));
    }
}


@Injectable()
export class MembersAdminSource extends DataSource<MemberModel> {


    constructor(
        private memberDatabase: MemberDatabase,private paginator: MdPaginator) {
        super();
    }


    /** Connect function called by the table to retrieve one stream containing the data to render. */
    connect(): Observable<MemberModel[]> {

      const displayDataChanges = [
          this.memberDatabase.dataChange,this.paginator.page,];

      return Observable
          .merge(...displayDataChanges) // Convert object to array with spread Syntax.
          .map(() => {
              const dataSlice = this.memberDatabase.data.slice(); // Data removed from viewed page.

              // Get the page's slice per pageSize setting.
              const startIndex = this.paginator.pageIndex * this.paginator.pageSize;

              const dataLength = this.paginator.length;  // This is for the counter on the DOM.

              return dataSlice.splice(startIndex,this.paginator.pageSize);
          });
    }
    disconnect() {}
}

全members.component.ts

在ngOnInit和类属性中进行了一些重构.

import { Component,OnInit,ViewChild } from '@angular/core';
import { Router } from '@angular/router';
import { Subject } from 'rxjs/Subject';

// For MD Data Table.
import { MdPaginator } from '@angular/material';
import { MembersAdminService,MembersAdminSource,MemberDatabase } from './member-admin.service';

import { ConfirmService } from '../../../shared/confirm.service';
import { MemberModel } from './member-admin.model';


@Component({
  selector: 'app-all-members',templateUrl: './all-members.component.html'
})


export class AllMembersComponent implements OnInit {

  membersData: MemberModel[];
  private result: boolean;
  allMembers: MemberModel[];

  // For search
  startAt = new Subject();
  endAt = new Subject();
  lastKeypress: 0;

    // For MD data table.

  // private memberDatabase = new MemberDatabase();  // Requires a param but? Moved to constructor.
  private dataSource: MembersAdminSource | null;
  private displayedColumns = [
      'firstName','lastName','mainSkillTitle','mainSkills','delete','key'
  ];

  @ViewChild(MdPaginator)
  paginator: MdPaginator;

  public dataLength: any; // For member counter on DOM.

  constructor(
      private membersAdminService: MembersAdminService,private memberDatabase: MemberDatabase,private router: Router,private confirmService: ConfirmService
  ) {}

  ngOnInit() {

      this.memberDatabase.getMembers()
          .subscribe(members => {
              this.dataSource = new MembersAdminSource(this.memberDatabase,this.paginator);
              this.dataLength = members;
          });
    }

全members.component.html

注意我在行中有按钮用于删除和编辑,它们工作正常.诀窍是您需要隐藏列中的数据库密钥.

<md-table #table [dataSource]="dataSource">

      <!-- First Name Column -->
      <ng-container cdkColumnDef="firstName">
        <md-header-cell *cdkHeaderCellDef> First Name </md-header-cell>
        <md-cell *cdkCellDef="let row"> {{row.firstName}} </md-cell>
      </ng-container>

      <!-- Las Name Column -->
      <ng-container cdkColumnDef="lastName">
        <md-header-cell *cdkHeaderCellDef> Last Name </md-header-cell>
        <md-cell *cdkCellDef="let row">  {{row.lastName}} </md-cell>
      </ng-container>

      <!-- Title Column -->
      <ng-container cdkColumnDef="mainSkillTitle">
        <md-header-cell *cdkHeaderCellDef> Title </md-header-cell>
        <md-cell *cdkCellDef="let row"> {{row.mainSkillTitle}} </md-cell>
      </ng-container>

      <!-- Main Skills Column -->
      <ng-container cdkColumnDef="mainSkills">
        <md-header-cell *cdkHeaderCellDef> Main Skills </md-header-cell>
        <md-cell *cdkCellDef="let row"> {{row.mainSkills}} </md-cell>
      </ng-container>

      <!-- Delete Buttons Column -->
      <ng-container cdkColumnDef="delete">
        <md-header-cell *cdkHeaderCellDef> Delete / Edit </md-header-cell>
        <md-cell *cdkCellDef="let row">
          <button (click)="deleteMember(row.$key)">Delete</button>
          <button (click)="goToDetailPage(row.$key)">Edit</button>
        </md-cell>
      </ng-container>

      <!-- Database key Column -->

      <ng-container cdkColumnDef="key">
        <md-header-cell *cdkHeaderCellDef> Key </md-header-cell>
        <md-cell *cdkCellDef="let row"> {{row.$key}} </md-cell>
      </ng-container>


      <md-header-row *cdkHeaderRowDef="displayedColumns"></md-header-row>
      <md-row *cdkRowDef="let row; columns: displayedColumns;"></md-row>


    </md-table>
    <md-paginator #paginator
                  [length]="dataLength?.length"
                  [pageIndex]="0"
                  [pageSize]="5"
                  [pageSizeOptions]="[5,10,25,100]">
    </md-paginator>

关于Angular JS firebase。child_added未在页面上呈现的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于android – Firebase onChildAdded用于新数据、angular 6,build无法在Firebase托管上加载图片、Angular JS firebase(child_added)未在页面上呈现、Angular Material 2数据表连接到AngularFire2或Firebase服务?的相关信息,请在本站寻找。

本文标签: