答案 0 :(得分:3)
花了一段时间,但我已经为你做了一些事。
如果您点击 F9
按钮,则所选值将加1。当它到达moviesList
数组的最后一个元素时,所选的值将重置为第一个元素。
<强> app.component.html
强>
<select id="movie" name="Movie" (keyup)="keyPress($event)"
[(ngModel)]="selectedMovie" autofocus>
<option *ngFor="let movie of moviesList">{{ movie.movie }}</option>
<强> app.component.ts
强>
selectedMovie: string;
moviesList = [{movie: 'Shrek'}, {movie: 'Inception'}, {movie: 'Interstellar'}, {movie: 'Star Wars'}, {movie: 'Nemo'} , {movie: 'Pluton'}, {movie: 'Pokemon'}];
i: number = 0;
constructor() {
this.selectedMovie = this.moviesList[0].movie;
}
keyPress(event): void {
this.i = this.moviesList.map(v => v.movie == this.selectedMovie).indexOf(true);
if (event.keyCode === 120) {
this.i++;
if (this.i < this.moviesList.length) {
this.selectedMovie = this.moviesList[this.i].movie;
} else {
this.selectedMovie = this.moviesList[0].movie;
this.i = 0;
}
}
}
<强> Plunker link 强>
答案 1 :(得分:2)
解决方案的原则由Kind用户的答案证明。但代码可能更简单:
<select id="movie" name="Movie"
(keyup.f9)="f9Pressed()"
[(ngModel)]="movies.value.name">
<option *ngFor="let movie of movieNameOptions" [value]="movie.value">
{{ movie.label }}
</option>
</select>
和
f9Pressed() {
let index = this.movieNameOptions.map(m => m.value).indexOf(this.movies.value.name);
index = (index + 1) % this.movieNameOptions.length;
this.movies.value.name = this.movieNameOptions[index].value;
}
有关完整的补丁,请参阅http://plnkr.co/edit/Bbf7Yh7NEqun6DKsFwQm?p=preview。