2016-10-03 61 views
5

請不要以標題來評判,先閱讀帖子。Ionic 2/angular 2 - 如何在組件中添加Typescript的HTML元素?

我剛開始學習使用離子2框架的typescript和angular 2。

我加入的HTML元素引用typscript變量「的newitem」,像這樣:

<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> 

在我的打字稿類我有一個函數addTodo()的組件,它設置爲HTML「的newitem」當pluss /在右上角添加圖標按:

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

出於某種原因,‘離子項目’標籤上編譯忽略,它只是插入‘測試’的div元素。

的機應用將是這樣的:

enter image description here

組件類:

enter image description here

於是,我把它添加到視圖:

<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"]; 
    } 
} 
+0

你能提供給我你的組件類?您實際上需要將新的項目對象推入'todos'數組中。不是html – JoeriShoeby

+0

我已經將組件類添加到帖子中。我想我可能只是更新數組,但我希望新項目能夠輸入數據,並且有用於保存和取消的按鈕。我想也許我可以爲addTodo()內容創建一個新組件。但我不知道如何動態地添加一個功能的組件。 –

+0

給我一個小時,然後我有一臺電腦來編碼給你解釋 – JoeriShoeby

回答

4

你的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 = ""; 
} 
+0

這樣的魅力,看起來不錯。除了現在按鈕不會顯示出來。你有沒有看到他們?我嘗試使用標籤而沒有。 –

+0

標籤內創建一個按鈕,並在該按鈕內對應的圖標/文本 – JoeriShoeby

+0

給我一個錯誤,頁面將不會加載。也許這是離子1而不是2? 控制檯輸出: 未處理的Promise拒絕:模板解析錯誤: 'ion'不是已知元素: –