离子手势不适用于 Firebase 数据?

Posted

技术标签:

【中文标题】离子手势不适用于 Firebase 数据?【英文标题】:ion-gesture not working with Firebase data? 【发布时间】:2021-04-04 15:17:49 【问题描述】:

你好。

我的 ionic 应用程序有问题,我在项目中添加了 ion-gesture,但由于 firebase 数据中的 ngFor="",卡片无法移动

这是我的代码:

<ion-card *ngFor="let postscall2 of postcall2" >
    
      <img class="profilePic"src="https://ucarecdn.com/ postscall2.profilePic /-/scale_crop/200x200/center/"/>
      <ion-img (click)="open(postscall2)"src="https://ucarecdn.com/postscall2.postboost2ID/-/preview/postscall2.effect"></ion-img>
     
        
      
    </ion-card>

还有打字稿部分

import  Component, ElementRef, OnInit, QueryList, AfterViewInit, ViewChildren from'@angular/core';
    import  AngularFirestore, AngularFirestoreDocument  from "@angular/fire/firestore";
    import  AngularFireFunctions from '@angular/fire/functions'
    import  firestore  from 'firebase/app';
    import * as firebase from 'firebase/app';
import  IonCard   from '@ionic/angular'

@Component(
  selector: 'app-feed',
  templateUrl: './feed.page.html',
  styleUrls: ['./feed.page.scss'],
)
export class FeedPage implements OnInit, AfterViewInit 
@ViewChildren(IonCard,  read: ElementRef ) cards: QueryList<ElementRef>;
sub
 postcall

 constructor(  
    private aff:AngularFireFunctions,
    public afstore: AngularFirestore,
    private afs: AngularFirestore, 
    private gestureCtrl: GestureController,
   ) 

 
ngOnDestroy() 
    this.sub.unsubscribe()


  
  
 
  ngOnInit() 
   

 const postcall2 = this.aff.httpsCallable('postscall2')
  this.sub = postcall2().subscribe(data =>
    this.postcall2 = data
    
    console.log("postcall2");
    console.log(this.postcall2);
   )



 ngAfterViewInit()

    const cardArray = this.cards.toArray()
    this.useLonpress(cardArray)
  


 useTinderSwipe(cardArray) 
       for (let i = 0; i < cardArray.length; i++)
         const card = cardArray[i];
         console.log('card', card)
         const gesture = this.gestureCtrl.create(
           el: card.nativeElement,
           gestureName: 'swipe',
           onStart: ev => 

           ,
           onMove: ev => 
            
            card.nativeElement.style.transform = `translateX($ev.deltaXpx) rotate($ev.deltaX / 10deg)`;

           ,
           onEnd: ev => 
           card.nativeElement.style.transition = '3.5 ease-out';
             if(ev.deltaX > 175)
              card.nativeElement.style.transform = '';
             console.log("do something")
             this.presentToast()

             else if (ev.deltaX < -175) 
              card.nativeElement.style.transform = '';
              console.log("do something else")
              this.presentToast1()

             else
               card.nativeElement.style.transform = '';
               
             
           
         );
         gesture.enable(true)
       
     


希望有人知道我需要改变什么。 并记得投票,该帖子可能会帮助其他有相同错误的编码员 提前谢谢你

【问题讨论】:

【参考方案1】:

更改您的模板:

<ion-img class="map" [src]="picToView" (click)="changeView()"></ion-img>

并在类中声明一个变量:

picToView:string="https://ucarecdn.com/postscall2.postboost2ID/-/preview/postscall2.effect";  // always instatiate with a valid value

和更改视图:

changeView()
          this.picToView=.....
  

我想知道如何获取第一个 img 的设计,但是当卡上有 2 个或更多产品时!

这是我的代码:

【讨论】:

试过了还是不行,谢谢解答【参考方案2】:

我遇到了同样的问题,并且发现对于动态(例如从 Firebase)加载的元素,现在使用 ngAfterViewInit() 还为时过早,因为那里的数据还没有准备好。

将代码从ngAfterViewInit() 移动到ngAfterViewChecked(),一切都应该完美无缺。

【讨论】:

以上是关于离子手势不适用于 Firebase 数据?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase linkwithcredential 不适用于 Facebook

SDK 选项不适用于 Eclipse 中的 Kindle Fire?

离子服务不适用于“应用内浏览器”插件

离子按钮(单击)事件不适用于模态 - 离子3

maxlength 不适用于输入类型 =“数字” 离子

角度计时器指令不适用于离子框架