Ionic 4 中的冲突组件:IonCard 和 SwingCardComponent

2023-12-05

我正在关注本教程,并且我在 Ionic3 和 4 之间的差异方面面临一些困难。我正在使用 Ionic4,当我这样做时ionic serve一切都编译成功,但是当我转到网络浏览器时,控制台中出现以下错误:

Uncaught Error: Template parse errors:
More than one component matched on this element.
Make sure that only one component's selector can match a given element.
Conflicting components: IonCard,SwingCardComponent ("stackConfig" (throwoutleft)="voteUp(true)" (throwoutright)="voteUp(false)"
    id="card-stack">
    [ERROR ->]<ion-card #mycards1 swing-card *ngFor="let c of cards">
      <ion-item *ngIf="c.picture">

我想知道为什么我不能同时使用离子卡和摇摆卡以及我应该使用什么。我的 home.page.html 文件如下:

    <ion-header>
      <ion-toolbar>
        <ion-title>
          Ionic Blank
        </ion-title>
      </ion-toolbar>
    </ion-header>

    <ion-content padding>
      <div swing-stack #myswing1 [stackConfig]="stackConfig" (throwoutleft)="voteUp(true)" (throwoutright)="voteUp(false)"
        id="card-stack">
        <ion-card #mycards1 swing-card *ngFor="let c of cards">
          <ion-item *ngIf="c.picture">
            <ion-avatar item-left>
              <img *ngIf="c.picture" [src]="c.picture.medium">
            </ion-avatar>
            <h2>{{ c.name.first }} {{ c.name.last}}</h2>
            <p>{{ c.email }}</p>
          </ion-item>

          <ion-card-content *ngIf="c.location">
            From: {{ c.location.city }}, {{ c.location.postcode }}<br>
            Phone: {{ c.phone }}
          </ion-card-content>

          <ion-row *ngIf="c.name">
            <ion-col>
              <button ion-button clear small icon-left color="primary" (click)="voteUp(true)">
                <ion-icon name="thumbs-up"></ion-icon>
                Yes
              </button>
            </ion-col>
            <ion-col>
              <button ion-button clear small icon-left color="primary" (click)="voteUp(false)">
                <ion-icon name="thumbs-down"></ion-icon>
                No
              </button>
            </ion-col>
          </ion-row>
        </ion-card>
      </div>
      <p style="text-align: center; width: 100%;">{{ recentCard }}</p>
    </ion-content>

我的 home.page.ts 文件如下:


    import { Component, ViewChild, ViewChildren, QueryList } from '@angular/core';
    import { NavController } from '@ionic/angular';
    import { Http } from '@angular/http';
    import 'rxjs/Rx';

    import {
      StackConfig,
      Stack,
      Card,
      ThrowEvent,
      DragEvent,
      SwingStackComponent,
      SwingCardComponent
    } from 'angular2-swing';

    @Component({
      templateUrl: './home.page.html'
    })

    export class HomePage {
      @ViewChild('myswing1') swingStack: SwingStackComponent;
      @ViewChildren('mycards1') swingCards: QueryList<SwingCardComponent>;

      cards: Array<any>;
      stackConfig: StackConfig;
      recentCard: string = '';

      constructor(private http: Http) {
        this.stackConfig = {
          throwOutConfidence: (offsetX, offsetY, element) => {
            return Math.min(Math.abs(offsetX) / (element.offsetWidth / 2), 1);
          },
          transform: (element, x, y, r) => {
            this.onItemMove(element, x, y, r);
          },
          throwOutDistance: (d) => {
            return 800;
          }
        };
      }

      ngAfterViewInit() {
        // Either subscribe in controller or set in HTML
        this.swingStack.throwin.subscribe((event: DragEvent) => {
          event.target.style.background = '#ffffff';
        });

        this.cards = [{ email: '' }];
        this.addNewCards(1);
      }

      // Called whenever we drag an element
      onItemMove(element, x, y, r) {
        var color = '';
        var abs = Math.abs(x);
        let min = Math.trunc(Math.min(16 * 16 - abs, 16 * 16));
        let hexCode = this.decimalToHex(min, 2);

        if (x < 0) {
          color = '#FF' + hexCode + hexCode;
        } else {
          color = '#' + hexCode + 'FF' + hexCode;
        }

        element.style.background = color;
        element.style['transform'] = `translate3d(0, 0, 0) translate(${x}px, ${y}px) rotate(${r}deg)`;
      }

      // Connected through HTML
      voteUp(like: boolean) {
        let removedCard = this.cards.pop();
        this.addNewCards(1);
        if (like) {
          this.recentCard = 'You liked: ' + removedCard.email;
        } else {
          this.recentCard = 'You disliked: ' + removedCard.email;
        }
      }

      // Add new cards to our array
      addNewCards(count: number) {
        this.http.get('https://randomuser.me/api/?results=' + count)
          .map(data => data.json().results)
          .subscribe(result => {
            for (let val of result) {
              this.cards.push(val);
            }
          })
      }

      // http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript
      decimalToHex(d, padding) {
        var hex = Number(d).toString(16);
        padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;

        while (hex.length < padding) {
          hex = "0" + hex;
        }

        return hex;
      }

    }

我的 home.module.ts 如下:

    import { NgModule } from '@angular/core';
    import { CommonModule } from '@angular/common';
    import { IonicModule } from '@ionic/angular';
    import { FormsModule } from '@angular/forms';
    import { RouterModule } from '@angular/router';

    import { HomePage } from './home.page';

    @NgModule({
      imports: [
        CommonModule,
        FormsModule,
        IonicModule,
        RouterModule.forChild([
          {
            path: '',
            component: HomePage
          }
        ])
      ],
      declarations: [HomePage]
    })
    export class HomePageModule {}

您可以关注 devdactic.com 在 IONIC 框架中制作 Tinder 卡。这是自 IONIC 2 以来的旧示例,但您的项目是 IONIC 4。我认为有很多差异和严格的规则。所以错误是:

1- ion-card是离子成分

2- 摇摆卡是 SwingCardComponent

两者都试图解析单个元素,并且在 IONIC 中不允许(也可能在 Angular 中)。

所以我改变了主页.html如下:

<ion-header>
  <ion-toolbar>
    <ion-title>
      Ionic Blank
    </ion-title>
  </ion-toolbar>
</ion-header>

<ion-content padding>
  <div swing-stack #myswing1 [stackConfig]="stackConfig" (throwoutleft)="voteUp(true)" (throwoutright)="voteUp(false)"
  id="card-stack">
  <div #mycards1 swing-card *ngFor="let c of cards">
      <ion-item *ngIf="c.picture">
          <ion-avatar item-left>
            <img *ngIf="c.picture" [src]="c.picture.medium">
          </ion-avatar>
          <h2>{{ c.name.first }} {{ c.name.last}}</h2>
          <p>{{ c.email }}</p>
      </ion-item>
      <ion-row *ngIf="c.location">
          From: {{ c.location.city }}, {{ c.location.postcode }}<br>
          Phone: {{ c.phone }}
        </ion-row>

        <ion-row *ngIf="c.name">
          <ion-col>
            <button ion-button clear small icon-left color="primary" (click)="voteUp(true)">
              <ion-icon name="thumbs-up"></ion-icon>
              Yes
            </button>
          </ion-col>
          <ion-col>
            <button ion-button clear small icon-left color="primary" (click)="voteUp(false)">
              <ion-icon name="thumbs-down"></ion-icon>
              No
            </button>
          </ion-col>
        </ion-row>
  </div>
</div>
<p style="text-align: center; width: 100%;">{{ recentCard }}</p>
</ion-content>

截屏:

Drag card

希望这对您有帮助:) 您可以在这里找到更新的源代码开发策略滑动

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ionic 4 中的冲突组件:IonCard 和 SwingCardComponent 的相关文章

随机推荐

  • 表和存储过程的批量重命名

    我需要重命名所有表 存储过程 显然还有每个存储过程中引用旧表名称的代码 为什么这是最好的方法 我考虑过的一些方法 SP Rename 完成了一半的工作 然而 这不会改变 SP 本身内的代码 除了RedGates的Refactor之外 我在这
  • React Native:React 导航 StackNavigator 不起作用。收到错误:“未定义不是对象(评估'this.props.navigation.navigate')”

    我正在尝试使用 React Navigation 和 StackNavigator 在我的应用程序中导航 我有一个按钮onPress gt navigate DetailsScreen 我希望这能带我去DetailsScreen 但我收到以
  • iPhone 应用程序升级时强制重置 NSUserDefault

    每当用户更新我的应用程序时 我想强制重置为 NSUserDefault 为什么我需要这个 因为每次更新都包含一些关于用户的新信息 由于 NSUserDefault 中已经存在一些信息 令牌 我的应用程序不会调用我的网络服务 因此我没有新的用
  • Python子进程和用户交互

    我正在 Python 2 6 中开发 GUI 前端 通常它相当简单 你使用subprocess call or subprocess Popen 发出命令并等待其完成或对错误做出反应 如果您的程序停止并等待用户交互 您会怎么做 例如 程序可
  • 升级 python 图像库 (PIL) 时,它告诉我“JPEG 支持不可用”

    使用ubuntu 13 10 python 2 7 5 gt gt gt import imaging Image gt gt gt from PIL import Image ImageDraw ImageFilter ImageFont
  • 从http内部函数返回数据

    我在用着this and this参考 从函数内的 http 请求返回数据 function getdetails id var datafordetails data1 item1 item2 data2 item3 ID id var
  • 将项目视为邮件项目

    我正在 Outlook 2016 中创建一个 VBA 应用程序 它分析传入的电子邮件并获取其主题行来搜索重复 或接近重复 的主题行 我使用 for each 循环来浏览项目列表 收件箱中的电子邮件 并分析每个项目的标准 一旦需要回复 传入的
  • R strptime 来自周数的星期一日期很奇怪

    我在这里犯了一个小错误 但无法集中精力找出问题所在 我需要获取随机日期的星期一的日期 似乎我得到了完全不同的东西 mydate lt date 2013 11 05 format mydate A this is Tuesday right
  • 流畅和查询表达式——其中一种比另一种有什么好处吗? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 LINQ 是自泛型以来对 NET 最伟大的改进之一 它为我节省了大量的时间和代码行 然而 对我来说 流畅的语法似乎比查询表达式语法更自然 var title entries Where e
  • 强制 MS Access 检索所有列表框行并释放锁定

    我有一个列表框 其中 RowSource 绑定到附加的 SQL Server 表 如果表很大 Access 不会加载完整的结果集 而是创建服务器端游标并在列表框向下滚动时 按需 加载数据 这是一个很好的功能 因为它允许列表框和组合框快速显示
  • jquery validate:为错误消息添加淡入/淡出效果

    我想为 jquery 验证上显示的错误消息添加淡入 淡出效果 有什么方法可以做到这一点 我可以在它们上使用 div 并单独处理它们吗 插件有这个效果吗 我使用此代码来放置错误消息 我需要它来正确放置 commentForm2 validat
  • NestJS TypeORM 模拟存储库的数据源

    我正在尝试模拟一个存储库 我不想进行实际的数据库调用 我 认为我 正在关注 NestJS 的文档以及某些 stackoverflow 项目 但是 当我运行测试时 出现以下错误 JwtStrategy validate throws an u
  • Java 7 支持的 JavaFx 应用程序未在 Mojave 上运行

    我的申请支持 Jdk1 7 0 76 JavaFx2 2 76 b13 Netbeans IDE Ant 用于构建和创建安装程序 在 Windows 和 Mac 上受支持 它一直成功运行到 High Sierra 当我尝试跑步时 app莫哈
  • 获取数据然后渲染到dom React

    您好 我正在从 api 获取数据 我想获取数据并将其渲染到 dom 但出现错误 Uncaught TypeError Cannot read property map of undefined at Topicselect render 这
  • CUDA 内核中的 2D 图像索引错误

    我正在使用 CUDA 对图像进行线性过滤 我使用 2D 线程块和 2D 网格来使问题变得自然 这是我的索引方式 height and width是图像尺寸 dim3 BlockDim 16 16 dim3 GridDim GridDim x
  • 以编程方式检测 iPhone 上是否安装了应用程序

    我处于这种情况 我必须在 iPhone 应用程序中显示一个按钮 其中显示 打开 myApp 如果设备上安装了 myApp 或 下载 myApp 如果设备上未安装 myApp 为此 我需要检测设备上是否安装了应用程序 具有已知的自定义 URL
  • jqgrid:添加表单需要但编辑表单不需要的字段?

    用户有密码 添加用户时需要密码 但在编辑操作时不需要密码 但可以更改 用jqgrid可以做到这一点吗 您可以更改的值required的财产编辑规则代替beforeShowForm see here 您可以使用设置列属性例如这样做 例如设置r
  • Javafx 2.0 中的自定义标题栏?

    有没有关于如何在 javafx 2 0 中创建自定义标题栏的教程 我正在创建一个桌面 GUI 应用程序 希望有一个黑色渐变标题栏 其中包含用于最小化和关闭的自定义按钮 Here是 WPF 的教程 我正在寻找类似于 javafx 的东西 隐藏
  • Powershell DSC:带有参数的复合资源不起作用

    我正在开发 DSC 复合资源 但我似乎无法让它工作 我的代码 E Dev DSCResources run ps1 Import Module Test Force Configuration Run Import DscResource
  • Ionic 4 中的冲突组件:IonCard 和 SwingCardComponent

    我正在关注本教程 并且我在 Ionic3 和 4 之间的差异方面面临一些困难 我正在使用 Ionic4 当我这样做时ionic serve一切都编译成功 但是当我转到网络浏览器时 控制台中出现以下错误 Uncaught Error Temp