无法在Firebase JS中使用startAt和equalTo进行查询

时间:2018-04-10 14:18:15

标签: angular typescript firebase firebase-realtime-database

这是我的DB:

enter image description here

这是我的问题: 1)当我使用下面的代码时,它会将对象返回给我

firebase.database().ref(`/restaurants`).orderByChild('name').equalTo('Good Restaurant').on('value', snap=>{
      console.log(snap.val())
    })

但是当我将equalTo的参数更改为${myInput}时,它将返回null

firebase.database().ref(`/restaurants`).orderByChild('name').equalTo(`${this.myInput}`).on('value', snap=>{
      console.log(snap.val())
    })

2)当我将equalTo更改为startAt时,它也会向我null返回。

firebase.database().ref(`/restaurants`).orderByChild('name').startAt(`${this.myInput}`).on('value', snap=>{
              console.log(snap.val())
            })

如果你怀疑输入解析有问题,下面是输入的IONIC html代码:

 <ion-searchbar
    placeholder="Please enter your restaurant Name"
    [(ngModel)]="myInput"
    [showCancelButton]="shouldShowCancel" (input)="onKeyUp()">
  </ion-searchbar>

修改

以下是onKeyUp()功能的工作原理:

myInput
inputTime
deplayTime = 1000

// as this is typescript, i don have to do "var" or "let"

onKeyUp(){
      console.log(this.myInput)
      clearTimeout(this.inputTime)
      this.inputTime = setTimeout(this.restaurantListing, this.deplayTime);
  }

  restaurantListing(){
    firebase.database().ref(`/restaurants`).orderByChild('name').equalTo(`${this.myInput}`).on('value', snap=>{
        console.log(snap.val())
      })

  }

因此,当我输入&#34; Good&#34;时,console.log(this.myInpit)执行4次并显示:&#34; G&#34;,&#34; Go&#34;,&#34 ; Goo&#34;,&#34; Good&#34;。 1秒后,它将只开始执行restaurantListing()

请提前帮助并表示感谢!

2 个答案:

答案 0 :(得分:0)

您不需要在Javascript类中插入变量,除非您想要执行startAt('string ${this.myInput} string')之类的操作。所以简单地传递变量:

firebase.database().ref(`/restaurants`).orderByChild('name').startAt(this.myInput)

修改

我的猜测是NgModelonchange事件触发后更新了输入,因此尝试了console.log(),但事实并非如此。但是,IONIC看起来像这样 - 首先调用onKeyUp()然后更新ngModel的值。您还可以使用console.log ngModel事件和keyUp来查看是否获得undefined。要解决您的错误,请尝试以下操作:

<ion-searchbar
    placeholder="Please enter your restaurant Name"
    [value]="myInput"
    [showCancelButton]="shouldShowCancel" (change)="onKeyUp($event.target.value)">
  </ion-searchbar>

onKeyUp(change) { this.myInput = change }

答案 1 :(得分:0)

试试这个,也许你的这个参考不适合那个上下文

var input = this.myInput;

firebase.database().ref('/restaurants').orderByChild('name').equalTo(input).on('value', snap=>{
  console.log(snap.val())
})