【发布时间】:2017-04-19 00:17:42
【问题描述】:
我正在创建一个组件,它根据从下拉列表中选择的值更改索引。下拉列表本身是一个风格化的而不是原生元素,因此会更新隐藏的输入字段。该字段在模板中,并与组件中的变量绑定。
这是组件和模板:
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接受更改,您需要确保从<input type="hidden">触发change事件,以便ngModel接受更改。@Input()在这里是多余的,因为它仅在您从外部将数据传递给SpellComponent时才相关 - 例如<ui-spell [spell]="1"> -
我知道有人会被 @Input() 拼写弄糊涂...它没有在模板的下拉部分中使用,它是我传入的一个对象,下拉列表将选择一个索引(模板中缺少 1 行,目前只是 "{{ spell.mana[level] }}" 作为测试)。关于大卫的评论,我不明白你的意思。输入字段绑定到“级别”。
标签: angular typescript