angular - typescript TS2532:对象可能在双向绑定角度中“未定义”
问题描述
我正在尝试在“用户”变量和 html 模板中的表单之间进行双向绑定:
export class UsersComponent implements OnInit {
user: User = {
firstname: '',
lastname: '',
age: 0,
adress: {
street: '',
city: '',
state: ''
}
};
...
表格中的示例:(我不想粘贴很多代码)
...
<div class="form-group">
<label for="street">Street Adress</label>
<input
type="text"
class="form-control"
[(ngModel)]="user.adress.street"
name="street"
/>
</div>
...
当我绑定 user.firstname、user.lastname 或 user.age 时,它可以工作:示例:
[(ngModel)]="user.age" //works
但是当我尝试 user.adress.street、user.adress.city 或 user.adress.state 时,id 无法编译示例:
[(ngModel)]="user.adress.street" //does not work
但是当我转到用户界面并单击保存时:编译有效
export interface User{
firstname: string;
lastname: string;
age?: number;
adress?: {
street?: string,
city?: string,
state?: string
}
active?: boolean;
registered?: any;
hide?: boolean;
}
当我编辑 ts 或 html 文件并保存时:它给了我一个编译错误:
Failed to compile.
src/app/components/users/users.component.html:39:36 - error TS2532: Object is possibly 'undefined'.
39 [(ngModel)]="user.adress.street"
~~~~~~
src/app/components/users/users.component.ts:7:16
7 templateUrl: './users.component.html',
~~~~~~~~~~~~~~~~~~~~~~~~
Error occurs in the template of component UsersComponent.
我尝试使用
user?.adress?.street
但它没有用
解决方案
另一种解决方案是使用 *ngIf="user.adress.street" 检查对象的内容,在这种情况下,angular 将等待该对象被填充。
<div class="form-group">
<label for="street">Street Adress</label>
<input
type="text"
class="form-control"
*ngIf="user.adress.street"
[(ngModel)]="user.adress.street"
name="street"
/>
</div>
如果您的对象有很多字段,那么在 HTML 上的所有对象中都很难做到这一点。在这种情况下,您可以使用 *ngIf 创建一个 div 并将内容放入其中。
<div *ngIf="user.adress.street">
...
<div class="form-group">
<label for="street">Street Adress</label>
<input
type="text"
class="form-control"
[(ngModel)]="user.adress.street"
name="street"
/>
</div>
</div>
我希望它可以帮助你
推荐阅读
- react-native - 如何将流的注册/登录集成到反应原生应用程序中?
- textview - 如何修复android studio中的动态textview?
- procedural-programming - 什么是正确的,面向过程的编程或过程编程?
- flutter - 将flutter版本从v1.12.13+hotfix.8升级到1.17.0后出现这样的错误
- amazon-web-services - 负载均衡器上的证书失败
- vsto - 在 Outlook 会议功能区中开会的团队会议的 idMso 是什么?
- php - PHP错误:未加括号的`a?乙:丙?d : e` 已弃用
- python - 运行代码后弹出第二个 tkinter 小部件
- sql-server - 基于与当前日期比较日期的 SQL Server 更新
- javascript - 获取按钮值后执行操作