在 angular 形式中使用局部变量
use local variables in angular forms
我有一个在前端使用 angular 构建的 Web 应用程序,我有一个用于查看的组件,我在其中显示当前产品的所有评论,并且我正在使用一个表单来收集评论。这是表格在 html:
中的样子
<form novalidate [formGroup]="reviewFormGroup" class="cnt-form">
<div class="row">
<div class="form-group">
<label for="exampleInputName">
Nume
<span class="astk">*</span>
</label>
<input type="text" formControlName="name" class="form-control txt" placeholder="">
</div>
</div>
<div class="row">
<div class="form-group">
<label for="exampleInputSummary">
Titlu
<span class="astk">*</span>
</label>
<input type="text" formControlName="summary" class="form-control txt" id="summary" placeholder="">
</div>
</div>
<div class="row">
<div class="form-group">
<label for="exampleInputReview">
Review
<span class="astk">*</span>
</label>
<textarea formControlName="review" class="form-control txt txt-review" id="review" rows="4" placeholder="" style="width:500px;"></textarea>
</div>
</div>
<div class="action text-right">
<button (click)="submitReview()" [disabled]="reviewFormGroup.invalid" class="btn btn-primary btn-upper">SUBMIT REVIEW</button>
</div>
</form>
为了创建表单,我在打字稿文件中使用了 FormGroup,并构建了一个函数来初始化它:
reviewFormGroup: FormGroup;
initializeForm() {
console.log(this.lastReviewId);
this.reviewFormGroup = this.fb.group({
id: [(this.lastReviewId+1).toString()],
name: ['', Validators.required],
summary: ['', Validators.required],
review: ['', Validators.required],
productId: [this.product["id"]]
});
}
问题是我需要为评论的 ID 提供一个值,我发现提供正确值的唯一方法是从数据库中获取上次评论的 ID(我存储了所有SQL 服务器中的数据,我正在使用 C# 连接到数据库和 take/modify/insert 数据)。所以我创建了这段代码:
this.api['getLastReviewId']().subscribe((data: number) => {
this.lastReviewId = data;
console.log(this.lastReviewId);
});
从 api.service.ts 调用一个函数,该函数向后端发出请求并获取上次评论的 ID 值。我唯一的问题是,无论我把这段代码放在哪里,在 initializeForm() 函数中 this.lastReviewId 都有值未定义,即使在分配后该值在日志中显示正确。我试图在调用 initializeForm() 之前将此代码块放入 OnInit() 函数中,并将其放入 initializeForm() 从函数的第一行开始,但是当我调用 console.log(this.lastReviewId)[= 时它仍然给我未定义的值31=] 来自 initializeForm().
我是不是做错了什么?我真的不明白为什么它没有分配正确的值,即使它在那里。
我怀疑您的 initializeForm() 在 API 调用之前收到调用。尝试调用 subscribe
下的 initializeForm() 方法
在 SQL 服务器中配置您的 table 以自动生成 ID,这样您的应用程序层就不需要管理该值。您将 运行 遇到的问题是您无法更改现有列并将其设置为标识。因此,如果可能的话,最好重建 table 并将 'id' 设置为标识列
CREATE TABLE [dbo].[TableName]
(
[id] [int] NOT NULL PRIMARY KEY IDENTITY(1, 1),
[name] [varchar(255)] NOT NULL,
[summary] [varchar(255)] NOT NULL
... other columns
)
完成此操作后,您在创建记录时将无需触及此列
我有一个在前端使用 angular 构建的 Web 应用程序,我有一个用于查看的组件,我在其中显示当前产品的所有评论,并且我正在使用一个表单来收集评论。这是表格在 html:
中的样子 <form novalidate [formGroup]="reviewFormGroup" class="cnt-form">
<div class="row">
<div class="form-group">
<label for="exampleInputName">
Nume
<span class="astk">*</span>
</label>
<input type="text" formControlName="name" class="form-control txt" placeholder="">
</div>
</div>
<div class="row">
<div class="form-group">
<label for="exampleInputSummary">
Titlu
<span class="astk">*</span>
</label>
<input type="text" formControlName="summary" class="form-control txt" id="summary" placeholder="">
</div>
</div>
<div class="row">
<div class="form-group">
<label for="exampleInputReview">
Review
<span class="astk">*</span>
</label>
<textarea formControlName="review" class="form-control txt txt-review" id="review" rows="4" placeholder="" style="width:500px;"></textarea>
</div>
</div>
<div class="action text-right">
<button (click)="submitReview()" [disabled]="reviewFormGroup.invalid" class="btn btn-primary btn-upper">SUBMIT REVIEW</button>
</div>
</form>
为了创建表单,我在打字稿文件中使用了 FormGroup,并构建了一个函数来初始化它:
reviewFormGroup: FormGroup;
initializeForm() {
console.log(this.lastReviewId);
this.reviewFormGroup = this.fb.group({
id: [(this.lastReviewId+1).toString()],
name: ['', Validators.required],
summary: ['', Validators.required],
review: ['', Validators.required],
productId: [this.product["id"]]
});
}
问题是我需要为评论的 ID 提供一个值,我发现提供正确值的唯一方法是从数据库中获取上次评论的 ID(我存储了所有SQL 服务器中的数据,我正在使用 C# 连接到数据库和 take/modify/insert 数据)。所以我创建了这段代码:
this.api['getLastReviewId']().subscribe((data: number) => {
this.lastReviewId = data;
console.log(this.lastReviewId);
});
从 api.service.ts 调用一个函数,该函数向后端发出请求并获取上次评论的 ID 值。我唯一的问题是,无论我把这段代码放在哪里,在 initializeForm() 函数中 this.lastReviewId 都有值未定义,即使在分配后该值在日志中显示正确。我试图在调用 initializeForm() 之前将此代码块放入 OnInit() 函数中,并将其放入 initializeForm() 从函数的第一行开始,但是当我调用 console.log(this.lastReviewId)[= 时它仍然给我未定义的值31=] 来自 initializeForm().
我是不是做错了什么?我真的不明白为什么它没有分配正确的值,即使它在那里。
我怀疑您的 initializeForm() 在 API 调用之前收到调用。尝试调用 subscribe
下的 initializeForm() 方法在 SQL 服务器中配置您的 table 以自动生成 ID,这样您的应用程序层就不需要管理该值。您将 运行 遇到的问题是您无法更改现有列并将其设置为标识。因此,如果可能的话,最好重建 table 并将 'id' 设置为标识列
CREATE TABLE [dbo].[TableName]
(
[id] [int] NOT NULL PRIMARY KEY IDENTITY(1, 1),
[name] [varchar(255)] NOT NULL,
[summary] [varchar(255)] NOT NULL
... other columns
)
完成此操作后,您在创建记录时将无需触及此列