我創建一個組件,根據從下拉列表中選擇的值更改索引。下拉本身是一個程式化的而非本地元素,因此更新了隱藏的輸入字段。該字段位於模板中,並與組件中的變量綁定。Angular2綁定輸入似乎沒有工作
這裏是組件和模板:
import { Component, ElementRef, Input, OnInit } from '@angular/core';
import { Spell } from '../../models/spell';
/**
* This class represents a Spell component
*/
@Component({
moduleId: module.id,
selector: 'ui-spell',
templateUrl: 'spell.component.html',
styleUrls: ['spell.component.css']
})
export class SpellComponent implements OnInit {
@Input() spell: Spell;
level: number;
constructor(private el: ElementRef) {
this.level = 1;
}
ngOnInit() {
}
update() {
console.log(this.level);
}
}
<div class="ui dropdown button">
<input name="level" type="hidden" [(ngModel)]="level">
<div class="text">Rank 1</div>
<i class="dropdown icon"></i>
<div class="menu">
<div class="item" data-value="1">Rank 1</div>
<div class="item" data-value="2">Rank 2</div>
<div class="item" data-value="3">Rank 3</div>
<div class="item" data-value="4">Rank 4</div>
<div class="item" data-value="5">Rank 5</div>
</div>
</div>
<button (click)="update()">Update</button>
輸入的值成功的變化,但如果我點擊更新按鈕,水平還是輸出爲「1」。如果我更改組件中的起始值並檢查輸入,則值已更改爲匹配。沒有任何錯誤可以解釋爲什麼該值不會返回到組件。我不知道下一步該往哪裏看。
你沒有約束力下拉到任何東西,所以我米不知道你爲什麼期望水平輸入實際更新到其他任何東西。 –
爲了讓'ngModel'接受這個改變,你需要確保''change type'事件是從''觸發的''ngModel'來接受改變。 '@Input()'在這裏是多餘的,因爲它只有在你從外部傳遞數據到'SpellComponent'時纔有意義 - 比如'' –
我知道有人會被@ Input()拼寫...它不在模板的下拉部分中使用,它是我傳入的一個對象,下拉列表將選擇一個索引(模板中缺少1行「{{spell .mana [level]}}「作爲此刻的測試)。關於大衛的評論,我不明白你的意思。輸入字段綁定到「級別」。 – Acaeris