【问题标题】:Ionic 2/angular 2 - How do I add HTML elements with Typescript to my component?Ionic 2/angular 2 - 如何将带有 Typescript 的 HTML 元素添加到我的组件中?
【发布时间】:2017-02-11 17:57:11
【问题描述】:

请不要不喜欢看标题,请先阅读帖子。

我刚刚开始学习使用 ionic 2 框架的 typescript 和 angular 2。

我正在添加引用 typscript 变量“newItem”的 html 元素,如下所示:

<ion-content>
  <ion-list inset>
    <ion-item *ngFor="let item of todos" (click)="edit(item)">
      {{item}}
    </ion-item>
    <ion-item>test</ion-item>
    <div [innerHTML]=newItem></div>
  </ion-list>
</ion-content>

在我的组件的 typescript 类中,我有一个函数 addTodo(),当按下右上角的加号/添加图标时,它为“newItem”设置 HTML:

  addTodo(){
    this.newItem = "<ion-item>test</ion-item>";
  }

由于某种原因,“ion-item”标签在编译时被忽略,它只将“test”插入到 div 元素中。

应用程序将如下所示:

组件类:

所以我尝试将其添加到视图中:

<form *ngIf="editedItem">
  <ion-item><input [(ngModel)]="newItem" name="newItem">
    <ion-buttons end>
      <button ion-button color="danger" (click)="btnCancel()">Cancel</button>
      <button ion-button color="secondary" (click)="btnAdd()">Add</button>
    </ion-buttons>
  </ion-item>
</form>

但是现在当我点击取消或添加时,页面需要重新加载。 我知道我在 [(ngModel)]="newItem" 上做错了,我应该尝试将 Angular 变量传递给模型还是有更好的方法来做到这一点。

编辑:将变量传递给 (click) 函数,如下面@JoeriShoeby 的回答所示。

在模型中:

export class TodosPage {

newItem = "";
todos: string[] = this.getTodos();
editedItem: boolean = false;

  constructor(public navCtrl: NavController) {

  }

  addTodo(){
    this.editedItem = true;
  }

  btnAdd(){
    this.todos.push(this.newItem);
    this.editedItem = false;
  }

  btnCancel(){
    this.editedItem = false;
  }

  getTodos(): string[]{

    return ["item 1", "item 2"];
  }
}

【问题讨论】:

  • 你能提供我你的组件类吗?您实际上需要将一个新项目对象推送到“待办事项”数组中。不是html
  • 我已将组件类添加到帖子中。我想我可能只是更新数组,但我希望新项目接受输入,并有用于保存和取消的按钮。我想也许我可以为 addTodo() 内容制作一个新组件。但我不知道如何用函数动态添加组件。
  • 给我一个小时,然后我有一台电脑编码给你解释
  • 那将不胜感激^^
  • 你没有使用它应该如何使用的角度。在 Angular 中,真实的点是模型,而不是视图。您可以通过修改模型来修改视图。基于新模型,视图会自行刷新并显示模型的新状态。要添加新项目,请将新元素添加到 todos 数组。然后视图将刷新:ngFor 会注意到有一个新元素,并将向页面添加一个新项目。

标签: html angular ionic-framework ionic2 typescript2.0


【解决方案1】:

您的 HTML 文件

// Your plus-icon in your header bar
<button (click)='toggleNew == true'>
    <ion-icon name='plus'></ion-icon>
</button>

// Your content
<ion-content>

  <ion-list inset>
    <ion-item *ngFor="let item of todos" (click)="edit(item)">
      {{item}}
    </ion-item>
  </ion-list>

    <ion-item *ngIf='toggleNew'>
        <ion-input [(ngModel)]='newItem' placeholder="Task .. "></ion-input>
        <button (click)='saveNew(newItem)'>Save</button>
        <button danger (click)='cancelNew()'>Cancel</button>
    </ion-item>
</ion-content>

你的组件

// Initalial values.
newItem: string = "";
toggleNew: boolean = false;

// Saving function
saveNew( newItem: string ): void {
    this.todos.push(newItem);
    this.toggleNew = false;
    this.newItem = "";
}

// Cancel function
cancelNew(): void {
    this.toggleNew = false;
    this.newItem = "";
}

【讨论】:

  • 这很有魅力,而且看起来也不错。除了现在按钮不会出现。你让他们展示了吗?我尝试使用 标签和没有。
  • 标签内创建一个按钮,并在该按钮内创建相应的图标/文本
  • 给我一个错误,页面不会加载。也许这是离子 1 而不是 2?控制台输出:未处理的承诺拒绝:模板解析错误:'ion' 不是已知元素:
  • 当还有离子输入时,我可以让它们显示在离子项目内部以外的任何其他位置。
  • 您需要使用
猜你喜欢
  • 2016-12-31
  • 2017-09-16
  • 2021-05-10
  • 2016-06-26
  • 1970-01-01
  • 2019-03-28
  • 2022-01-16
  • 1970-01-01
  • 2017-06-27
相关资源
最近更新 更多