我有一个新的Angular 2应用程序,其中包含一个输入框列表.当用户点击返回键时,我会在他们当前正在编辑的输入框之后立即添加一个新输入框.或者更确切地说,我(异步)在模型中向数组添加一个新条目,这使得Angular 2在不久的将来自动生成一个新的输入框.
如何使输入焦点自动更改为新添加的元素?
[edit]或者,我得到了一个引起DOM生成的模型对象的引用.从组件代码中,有没有办法搜索表示特定模型对象的DOM元素?
[编辑]这是我的代码,使这项工作.希望这对一些Angular 2开发者来说足够冒犯以鼓励回复:-)
app.WordComponent = ng.core
.Component({
selector: 'word-editor',
template:'<input type="text" [value]="word.word" (input)="word.update($event.target.value)" (keydown)="keydown($event)"/>',
styles:[
''
],
properties:[
'list:list',
'word:word'
]
})
.Class({
constructor:[
function() {
}
],
keydown:function(e) {
if(e.which == 13) {
var ul = e.target.parentNode.parentNode.parentNode;
var childCount = ul.childNodes.length;
this.list.addWord("").then(function(word) {
var interval = setInterval(function() {
if(childCount < ul.childNodes.length) {
ul.lastChild.querySelector('input').focus();
clearInterval(interval);
}
}, 1);
});
}
}
});
Run Code Online (Sandbox Code Playgroud) 我在Angular 1.x上找到了一些项目,用户可以通过按Enter键将焦点移动到下一个控件.
'use strict';
app.directive('setTabEnter', function () {
var includeTags = ['INPUT', 'SELECT'];
function link(scope, element, attrs) {
element.on('keydown', function (e) {
if (e.keyCode == 13 && includeTags.indexOf(e.target.tagName) != -1) {
var focusable = element[0].querySelectorAll('input,select,button,textarea');
var currentIndex = Array.prototype.indexOf.call(focusable, e.target)
var nextIndex = currentIndex == focusable.length - 1 ? 0 : currentIndex + 1;
if (nextIndex >= 0 && nextIndex < focusable.length)
focusable[nextIndex].focus();
return false;
}
});
}
return {
restrict: 'A',
link: link
};
});
Run Code Online (Sandbox Code Playgroud)
但这对Angular 2不起作用.如何在Angular 2中的Enter keypress上设置焦点到下一个控件?
抱歉这个菜鸟问题......
使用 primeng 包时,将焦点设置在控件上的推荐方法是什么?使用传统输入控件时,我设置一个表单变量 (#variable) 并使用 @ViewChild 获取对它的引用,以便我可以访问其本机元素:
this._variable.nativeElement.focus();
Run Code Online (Sandbox Code Playgroud)
当使用 primeng 的控件之一时,我怎样才能做同样的事情?
谢谢。
路易斯
我已经编写了如下所述的代码。到目前为止,仅在单击鼠标时选择列表项。即使按下键盘上的向上和向下箭头,我也想遍历列表。如何使用angular2实现此目的?
import { Component } from '@angular/core';
export class Hero {
name: string;
}
const HEROES: Hero[] = [
{ name: 'STWX1' },
{ name: 'STWX2' },
{ name: 'STWX3' },
{ name: 'STWX4' }
];
@Component({
selector: 'my-app',
template: `
<div style="display: inline-block; width = 200px; ">
<ul class="heroes">
<li *ngFor="let hero of heroes" (click)="onSelect(hero)"
[class.selected]="hero === selectedHero">
<p>{{hero.name}}</p>
</li>
</ul>
</div>'
Run Code Online (Sandbox Code Playgroud)
,样式:[...]})
export class AppComponent {
name = 'Angular1';
testRequestId = '3224';
heroes = HEROES;
selectedHero: Hero;
goToDivClick() …Run Code Online (Sandbox Code Playgroud)