Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 修改Angular 4输入框的模型值_Javascript_Angular_Angular2 Directives - Fatal编程技术网

Javascript 修改Angular 4输入框的模型值

Javascript 修改Angular 4输入框的模型值,javascript,angular,angular2-directives,Javascript,Angular,Angular2 Directives,我试图修改Angular 4的输入框模型,这样,如果用户在框中输入,比如说23,框中应该显示23% 在(输入)或(更改)等事件中访问模型值后,我尝试将%附加到模型值。然而,这完全改变了模型。我想要的是角度模型变量仍然应该包含23,但应该显示23% 有没有什么方法可以让我围绕这一点制定一个指令。有什么建议或链接吗?这是一种有点老套的方式,但你可以这样做: <input #input1 value="{{title}}%" (keydown)=setModel(input1.value)>

我试图修改Angular 4的输入框模型,这样,如果用户在框中输入,比如说23,框中应该显示23%

在(输入)或(更改)等事件中访问模型值后,我尝试将
%
附加到模型值。然而,这完全改变了模型。我想要的是角度模型变量仍然应该包含23,但应该显示23%


有没有什么方法可以让我围绕这一点制定一个指令。有什么建议或链接吗?

这是一种有点老套的方式,但你可以这样做:

<input #input1 value="{{title}}%" (keydown)=setModel(input1.value)>

value=“{{title}}%”
将采用
title
值,并将在末尾添加
%
。您可以使用
setModel
方法设置新值,但在设置之前,您需要删除所有
%
字符,如下所示:
this.title=val.split('%').join('')

由于您试图更改组件显示值的方式,因此应使用指令,而不是更改模型中的实际值。换句话说,这里需要一个输入掩码。您可以使用现有软件包之一(例如)或编写自己的指令。

您可以创建一个具有两个值的组件:一个是绑定值,另一个是显示值。组件看起来有点像这样:

@Component({
  selector: 'hello-world',

  template: `
    <input type="text" [(ngModel)]="display" (keyup)="updateInput($event)" placeholder="Enter a name here">
    <hr>
    <h1>Input: {{input}}</h1>
`
})
export class HelloWorld {

  @Input() input = 0;
  @Output() inputChange = new EventEmitter();
  display;

  ngOnInit() {
    this.display = `${this.input}%`
  }

  updateInput(evt) {
    this.input = this.display.replace(/[^0-9.]/g, "");
    this.display = `${this.input}%`;
    this.inputChange.emit(this.input);
  }
}
@组件({
选择器:“你好,世界”,
模板:`

输入:{{Input} ` }) 导出类HelloWorld{ @Input()输入=0; @Output()inputChange=neweventemitter(); 展示; 恩戈尼尼特(){ this.display=`${this.input}%` } 更新输入(evt){ this.input=this.display.replace(/[^0-9.]/g,”); this.display=`${this.input}%`; this.inputChange.emit(this.input); } }
您可以像这样绑定到组件:

<hello-world [(input)]="myVar"></hello-world>


我也希望在这张图片中使用ngModel,因为我的一些输入框将动态填充
属性在这里做同样的事情,它显示
标题
值,标题值在
按键
事件中更新。它实际上与ngModel做的事情相同,我知道我必须使用指令来实现这一点,但问题是如何操作角度模型。在AngularJS中是否有类似ngModelCtrl的替代方法?如果您使用反应式表单API显式创建模型对象,例如formModel:
FormGroup=new FormGroup(…)指定要添加到模型中的表单字段。然后,您可以只为模型上的特定字段分配一个值:
this.myFormModel.value.customer=“Mary”
<hello-world [(input)]="myVar"></hello-world>