Open PunkMoon opened 7 years ago
我刚开始用的是ion-textatea,发现如果要使用setSelectionRange这个方法需要转成nativeElement,控制台输出如图 这样可以获取焦点但是改变不了焦点的位置。
post.html
<ion-label floating>你在做什么</ion-label> <ion-textarea #post rows='12' [(ngModel)]="data.message" (ngModelChange)='msgCount($event)'></ion-textarea> </ion-label>
post.ts
export class PostPage implements OnInit{ @ViewChild('post') postEl; constructor(public params:NavParams){ this.data={ message:'' }; } ngOnInit(){ let msg=this.params.get('msg'); if(msg){ let el=this.elRef.nativeElement.querySelector('textarea'); this.data['message']=msg; this.setCaretPosition(el,0); } } setCaretPosition(elem, caretPos) { var range; console.log(elem); if (elem.createTextRange) { range = elem.createTextRange(); range.move('character', caretPos); range.select(); } else { elem.focus(); elem.setSelectionRange(caretPos, caretPos); } } }
然后,我把换成了,获取不到焦点也设置不了焦点的位置。 google后我找到了别人做的一个demo,[Set Cursor Position In Text Area Using Angular 2][http://blog.sodhanalibrary.com/2016/10/set-cursor-position-in-text-area-using.html#.WGinSLZ96qB]。我比较了一下他和我不一样的地方,他的textarea没做数据绑定,textarea本身就存在value,而我的数据是绑定在textarea上面的。 所以的在调用setCaretPosition函数之前先加了一段
this.postEl.nativeElement.value=msg;
结果仍然没有效果。此时的我已经黔驴技穷了,求问有什么解决办法么。
变量被修改后,去渲染对应的 DOM 内容,这是一个异步操作。
this.setCaretPosition(el,0);
修改为
setTimeout(() => { this.setCaretPosition(el, 2); }, 0);
我刚开始用的是ion-textatea,发现如果要使用setSelectionRange这个方法需要转成nativeElement,控制台输出如图
这样可以获取焦点但是改变不了焦点的位置。
然后,我把换成了,获取不到焦点也设置不了焦点的位置。
google后我找到了别人做的一个demo,[Set Cursor Position In Text Area Using Angular 2][http://blog.sodhanalibrary.com/2016/10/set-cursor-position-in-text-area-using.html#.WGinSLZ96qB]。我比较了一下他和我不一样的地方,他的textarea没做数据绑定,textarea本身就存在value,而我的数据是绑定在textarea上面的。
所以的在调用setCaretPosition函数之前先加了一段
结果仍然没有效果。此时的我已经黔驴技穷了,求问有什么解决办法么。