- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 react 形式,我试图获取它的值并将其分配给一个在接口(interface)中定义的类型的变量。尽管此表单是使用 Google Places API 填充的(因此所有表单控件都被禁用且用户无法编辑,除了第一个表单控件 - 该控件是用户输入初始地址的字段)。
react 形式如下:
ngOnInit() {
// Initialization of branch Address reactive form (Form 2 - Step 2)
this.addBranchAddressReactiveForm();
}
// Form Group 2 - Branch Address (Step 2)
addBranchAddressReactiveForm() {
this.addBranchAddressForm = this.fb.group({
// Branch Address Control
branchAddress: ['',
Validators.compose([Validators.required])
],
// Branch Street Name Control
branchStreetName: [{value: '', disabled: true},
Validators.compose([Validators.required])
],
// Branch Suburb Control
branchSuburb: [{value: '', disabled: true},
Validators.compose([Validators.required])
] ,
// Branch City Control
branchCity: [{value: '', disabled: true},
Validators.compose([Validators.required])
],
// Branch Province Control
branchProvince: [{value: '', disabled: true},
Validators.compose([Validators.required])
],
// Branch Country Control
branchCountry: [{value: '', disabled: true},
Validators.compose([Validators.required])
],
// Branch ZIP Control
branchZip: [{value: '', disabled: true},
Validators.compose([Validators.required])
]
});
}
如上所示,除第一个 (branchAddress) 之外的所有控件都被禁用 - 因为这些控件是在选择地址时填充的。在 component.html 文件中查看表单本身时,您可以看到“值”是动态分配的(因为这些值会根据所选地址而变化):
<form [formGroup]="addBranchAddressForm">
<ng-template matStepLabel>Enter New Branch Address</ng-template>
<div class="new-branch-form-container">
<!-- Main Branch Address Parameter (Input that generates the autocomplete dropdown list) -->
<mat-form-field>
<mat-label>Enter New Branch Address</mat-label>
<input matInput placeholder="Enter a location" formControlName="branchAddress" ngx-google-places-autocomplete #placesRef="ngx-places" [options]="addressOptions" (onAddressChange)="handleAddressChange($event)"/>
<mat-hint>Enter the address of the new branch and select the appropriate address item</mat-hint>
<mat-error>Please enter the new branch’s address</mat-error>
</mat-form-field>
<!-- Branch Street Name (Autofilled) -->
<mat-form-field>
<mat-label>Street Name</mat-label>
<input matInput formControlName="branchStreetName" readonly value={{streetName}}>
<mat-hint>The street name of the address selected</mat-hint>
<mat-error>Please enter the street name of the address specified</mat-error>
</mat-form-field>
<br>
<!-- Branch Suburb (Autofilled) -->
<mat-form-field>
<mat-label>Suburb</mat-label>
<input matInput formControlName="branchSuburb" readonly value={{suburb}}>
<mat-hint>The suburb of the address selected</mat-hint>
<mat-error>Please enter a valid suburb</mat-error>
</mat-form-field>
<br>
<!-- Branch City (Autofilled) -->
<mat-form-field>
<mat-label>City / Town</mat-label>
<input matInput formControlName="branchCity" readonly value={{city}}>
<mat-hint>The city of the address selected</mat-hint>
<mat-error>Please enter a valid city</mat-error>
</mat-form-field>
<!-- Branch Province (Autofilled) -->
<mat-form-field>
<mat-label>Province</mat-label>
<input matInput formControlName="branchProvince" readonly value="{{province}}">
<mat-hint>The province of the address selected</mat-hint>
<mat-error>Please enter the province of the address specified</mat-error>
</mat-form-field>
<br>
<!-- Branch Country (Autofilled) -->
<mat-form-field>
<mat-label>Country</mat-label>
<input matInput formControlName="branchCountry" readonly value={{country}}>
<mat-hint>The country of the address selected</mat-hint>
<mat-error>Please enter the country of the address specified</mat-error>
</mat-form-field>
<br>
<!-- Branch ZIP (Autofilled) -->
<mat-form-field>
<mat-label>ZIP</mat-label>
<input matInput formControlName="branchZip" readonly value={{zip}}>
<mat-hint>The ZIP / Postal code of the address selected</mat-hint>
<mat-error>Please enter the ZIP / Postal code of the address specified</mat-error>
</mat-form-field>
<br>
</div>
<!-- Button to navigate to previous step in stepper -->
<button mat-stroked-button matStepperPrevious color="primary">Back</button>
<!-- Button to navigate to next step in stepper (disabled until branch address form is valid) -->
<button mat-stroked-button matStepperNext color="primary" [disabled]="!addBranchAddressForm.valid">Next</button>
</form>
我的问题如下。我希望能够将此表单中的值分配给一个对象,以便我可以通过链接到 Web API(不重要)在数据库中创建记录 - 尽管在尝试将此表单的值分配给变量,传递的唯一“值”是用户自己输入的值。例如,如下所示,用户在选择地址之前输入“12”。
这个“12”将是下面代码捕获的唯一值(尽管在地址选择后填充了其余控件):
const branch: Branch = this.addBranchDetailsForm.value;
因此,当记录上面的“分支”时,输出如下,而不是在每个单独的表单控件中找到的所有值的对象:
我正在按如下方式填充表单控件值:
public handleAddressChange(address: any) {
// Full unformatted address (Not Displayed)
this.address = address.formatted_address;
console.log(this.address);
// Place id (Not Displayed)
this.placeId = address.place_id;
console.log(this.placeId);
// Latitude coordinate (Not Displayed)
this.latitude = address.geometry.location.lat();
console.log(this.latitude);
// Longitude coordinate (Not Displayed)
this.longitude = address.geometry.location.lng();
console.log(this.longitude);
// Reset street address on method refresh
this.streetName = "";
// Street number (Displayed i.t.o)
for (var i = 0; i < address.address_components.length; i++) {
for (var x = 0; x < address.address_components[i].types.length; x++) {
if (address.address_components[i].types[x] === "street_number") {
this.streetName = JSON.parse(JSON.stringify(address.address_components[i].long_name)) + " ";
}
}
}
// Street name (Displayed i.t.o)
for (var i = 0; i < address.address_components.length; i++) {
for (var x = 0; x < address.address_components[i].types.length; x++) {
if (address.address_components[i].types[x] === "route") {
this.streetName += JSON.parse(JSON.stringify(address.address_components[i].long_name));
}
}
}
// Reset suburb on method refresh
this.suburb = "";
// Suburb (Displayed)
for (var i = 0; i < address.address_components.length; i++) {
for (var x = 0; x < address.address_components[i].types.length; x++) {
if (address.address_components[i].types[x] === "sublocality") {
this.suburb = JSON.parse(JSON.stringify(address.address_components[i].long_name))
}
}
}
// Reset city on method refresh
this.city = "";
// City (Displayed)
for (var i = 0; i < address.address_components.length; i++) {
for (var x = 0; x < address.address_components[i].types.length; x++) {
if (address.address_components[i].types[x] === "locality") {
this.city = JSON.parse(JSON.stringify(address.address_components[i].long_name))
}
}
}
// Reset province on method refresh
this.province = "";
// Province (Displayed)
for (var i = 0; i < address.address_components.length; i++) {
for (var x = 0; x < address.address_components[i].types.length; x++) {
if (address.address_components[i].types[x] == "administrative_area_level_1") {
this.province = JSON.parse(JSON.stringify(address.address_components[i].long_name))
}
}
}
// Reset country on method refresh
this.country = "";
// Country (Displayed)
for (var i = 0; i < address.address_components.length; i++) {
for (var x = 0; x < address.address_components[i].types.length; x++) {
if (address.address_components[i].types[x] == "country") {
this.country = JSON.parse(JSON.stringify(address.address_components[i].long_name))
}
}
}
// Reset zip on method refresh
this.zip = "";
// ZIP (Displayed)
for (var i = 0; i < address.address_components.length; i++) {
for (var x = 0; x < address.address_components[i].types.length; x++) {
if (address.address_components[i].types[x] == "postal_code") {
this.zip = JSON.parse(JSON.stringify(address.address_components[i].long_name))
}
}
}
}
handleAddressChange 方法接受在表单的第一个控件(字段)中输入的地址,如下所示:
<!-- Main Branch Address Parameter (Input that generates the autocomplete dropdown list) -->
<mat-form-field>
<mat-label>Enter New Branch Address</mat-label>
<input matInput placeholder="Enter a location" formControlName="branchAddress" ngx-google-places-autocomplete #placesRef="ngx-places" [options]="addressOptions" (onAddressChange)="handleAddressChange($event)"/>
<mat-hint>Enter the address of the new branch and select the appropriate address item</mat-hint>
<mat-error>Please enter the new branch’s address</mat-error>
</mat-form-field>
当此方法被激活时,如上所示的变量(例如 this.suburb/this.city)被填充 - 因此这些变量显示为相应输入字段中值属性的一部分。例如:
<!-- Branch Suburb (Autofilled) -->
<mat-form-field>
<mat-label>Suburb</mat-label>
<input matInput formControlName="branchSuburb" readonly value={{suburb}}>
<mat-hint>The suburb of the address selected</mat-hint>
<mat-error>Please enter a valid suburb</mat-error>
</mat-form-field>
<br>
在上面你可以看到变量 (this.suburb) 被设置为值属性 {{suburb}}..
感谢任何关于为什么会出现这种情况的原因。感谢您的宝贵时间。
最佳答案
由于存在禁用字段,formGroup.value
不会返回这些值。您需要调用 formGroup 的 getRawValue()
方法来获取字段值,而不管它们的启用/禁用状态如何。
你需要这样做:
const branch: Branch = this.addBranchDetailsForm.getRawValue();
来自 Angular 文档:https://angular.io/api/forms/FormGroup#getRawValue
getRawValue()
- Retrieves all values regardless of disabled status.The value property is the best way to get the value of the group,because it excludes disabled controls in the FormGroup.
从更新的代码中可以清楚地看出,您没有设置 formGroup 值,因此尽管使用了 getRawValue()
方法,但您得到的是空白值。这里您没有更新 formControl。
this.streetName = JSON.parse(JSON.stringify(address.address_components[i].long_name)) + " ";
您需要将其更改为:
this. addBranchDetailsForm.get('branchStreetName').setValue(JSON.stringify(address.address_components[i].long_name)) + " ";
同样适用于所有其他领域。
关于html - Angular react 形式控制值只是用户类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68744831/
这是一个新手理论问题 - 我刚刚开始使用 Python 并研究 Django 和 orm。问题:如果我开发我的对象并通过额外的开发修改基础对象结构、继承等 - Django 的 ORM 解决方案会自动
我正在使用带有服务器端处理器的 JavaScript 表单,并且我希望能够让表单根据下拉列表转到不同的电子邮件。我已经根据其他表格尽了最大努力,但似乎无法通过电子邮件。我已在电子邮件地址的选项标签下添
一个简单的问题:给定定义,(来自 Haskell SOE) do x — el; el\ ...; en => el »= \x — do e2\ ...; en 和: do let d
我是 Angular 5 的新手。我目前正在研究 Angular Reactive 表单。我有一个下面的 JSON 结构,我需要在从 FORM 获取值后发回 REST API。 JSON 结构: {
我是 Angular 5 的新手。我目前正在研究 Angular Reactive 表单。我有一个下面的 JSON 结构,我需要在从 FORM 获取值后发回 REST API。 JSON 结构: {
我有一个类型(称之为 A),我想创建一个 A -> A、A -> A -> A、A -> A -> A -> ... 等类型的函数的类型类.这不起作用: {-# LANGUAGE FlexibleIn
我正在使用 java 线程同时管理多个 (3) 程序。1 用于 Java swing 表单(绘制 UI 以进行输入),1 用于在系统托盘上设置图标(从 UI 获取输入后立即启动),1 用于处理输入并将
在当前的元素中,我在表单中遇到了一个问题。表单中标签的字体大小可能大于默认值。如果我把它举起来,那么右边的输入必须垂直居中。 我查看了 Bootstrap 和 Foundation,但都没有解决这个问
为了好玩,我使用了一段从 friend 那里得到的代码,并尝试创建一个包含用户名和密码的登录字段,但我很难获得单词旁边的字段。 username 这个词和你输入的框之间有很大的差距。密码也是如此。 这
我的表单中有一个嵌套的控制组,我想访问它们的表单状态值(如原始和有效)以动态显示验证错误。 是这样动态构建的 controlMap['password'] = this.password; contr
发送后我试图重置我的表单,但只有值设置为空。 component.html {{note.value?.length || 0}}/10
我正在尝试自定义 Stripe 结帐表单,但我不知道如何添加输入。我想添加“电话号码”和“姓名”以创建费用和客户。你知道我该怎么做吗? 这是我应该自定义的代码。 最佳答案 您将无法使用
所以我有这个需求,我想以表格的形式提交一个由五个记录组成的表单。这就是它的样子表: 这是对应的代码: Section Q.No Question
我有一个使用 react 形式和输入文本的情况。 我需要: 当用户输入时,根据输入的内容建议一个列表(我使用的是 ngx bootstrap typeahead); 仅当用户失去输入焦点时才验证输入字
我希望重构我的 Angular 项目中的大量组件,以具有强类型的 FormGroups、FormArrays 和 FormControls。 我只是在寻找一种实现强类型 react 形式的好方法。任何
我有事件表格: 'horizontal', 'fieldConfig' => [ 'template' => "{input}\n{hint}\n{error}",
是否有关于如何实现多选和响应式表单的示例? 我正在尝试在 multiselect-dropdown 上设置所选项目(从数据库中检索),它会更新显示的项目( View ),但会引发以下错误: core.
我想在表单中添加按钮以动态添加输入。但是我发现,如果我在表单中添加了一个仅记录到控制台的按钮(并且当我尝试添加输入时),它将记录日志,然后表单中断。我的Electron应用程序的前端窗口崩溃(不退出但
我有一个这样的表格 此表单位于指令内: angular.module('crowdcoreApp').directive('investorForm',function(){
我在 angularjs Controller 中调用的 $mdDialog 中有一个表单,如下所示: actions-controller.js function callForm() {
我是一名优秀的程序员,十分优秀!