Angular4 ngModel 将数据类型从“数字”更改为“字符串”

dmi*_*ler 5 javascript typescript ngmodel angular

我有一个 Angular4 应用程序,它从表单中捕获数据并存储在 DynamoDB 中。它使用 ngModel 支持双向数据绑定,并且在显示器上看起来都不错。由于输入字段键入为绑定到 Typescript 的“数字”字段的“文本”,因此出现问题。似乎正在将对象值的类型更改为“字符串”。我会简单地将 HTML 输入类型更改为“数字”,除了表单字段上不必要和不需要的增量/减量装饰器(隐藏它们似乎支持有限)。所以我很好奇是否有另一种方法可以保持数据结构按需要输入……如果这是 ngModel 中的错误……或者输入类型只需要是“数字”。

我的 sample.component.ts 文件中的结构如下所示:

export class Course {
  Id: number;
  Name: string;
}
...
courseInstance: Course;

saveCourse() {
    JSON.stringify(this.courseInstance);
}
Run Code Online (Sandbox Code Playgroud)

我的 sample.component.html 文件如下所示:

<div>
  <label for="courseid">Course ID: </label>
  <input type="text" class="form-control"[(ngModel)]="courseInstance.Id" name="courseid">
</div>
<div>
  <label for="courseName">Course Name: </label>
  <input type="text"  class="form-control"[(ngModel)]="courseInstance.Name" name="courseName">
</div>
<div>
  <button type="button" class="btn btn-info btn-lg" (click)="saveCourse()">Save</button>
</div>
Run Code Online (Sandbox Code Playgroud)

JSON.stringify(this.courseInstance) 的输出结果类似于

{"Id":"100","Name":"Test course"}
Run Code Online (Sandbox Code Playgroud)

请注意表示为字符串的值 100。

如果我不使用表单,而只是创建一个实例,例如

courseInstance: Course = {
  Id: 100,
  Name: 'Test course'
};
Run Code Online (Sandbox Code Playgroud)

然后在输出 JSON.stringify(courseInstance) 的结果时;我得到

{"Id":100,"Name":"Test course"}
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用 PutItem 在 DynamoDB 中存储对象,当数据来自 HTML 表单时,Id 值无法进行类型检查。

我原以为 Typescript 中的输入会优先于 HTML 的“文本”输入类型。

Sur*_*yan 5

将 type 改为textthenumber即可使字体number不让写字母。

<input type="number" class="form-control"[(ngModel)]="courseInstance.Id" name="courseid">
Run Code Online (Sandbox Code Playgroud)