S'il vous plaît ne détestez pas juger par le titre, lisez d'abord le message.
Je viens de commencer à apprendre TypeScript et angular 2 en travaillant avec le cadre ionic 2).
J'ajoute l'élément html référençant la variable typscript "newItem", comme ceci:
<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>
Dans ma classe TypeScript pour le composant, j'ai une fonction addTodo (), qui définit le code HTML pour "newItem" lorsque l'icône plus/ajouter dans le coin droit est enfoncée:
addTodo(){
this.newItem = "<ion-item>test</ion-item>";
}
Pour une raison quelconque, la balise "ion-item" est ignorée lors de la compilation et n'insère que "test" dans l'élément div.
L'appliction ressemblera à ceci:
Classe de composants:
J'ai donc essayé d'ajouter ceci à la vue:
<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>
Mais maintenant, lorsque je clique sur annuler ou ajouter, la page doit être rechargée. Je sais que je fais quelque chose de mal avec la [(ngModel)] = "newItem", dois-je essayer de passer la variable Angular au modèle ou y a-t-il une meilleure façon de le faire .
edit: passé la variable à la fonction (clic), comme on le voit dans la réponse de @JoeriShoeby ci-dessous.
Dans le modèle:
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"];
}
}
Votre fichier 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>
Votre composant
// 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 = "";
}