我有这样的数据
[{value: 6, name: "delete-wews", checked: false}
{value: 5, name: "update-user", checked: false}
{value: 4, name: "search-user", checked: true}
{value: 3, name: "list-user", checked: false}
{value: 2, name: "find-user", checked: false}
{value: 1, name: "create-user", checked: true}]
Run Code Online (Sandbox Code Playgroud)
现在,在我的模板中,它看起来是这样的,但是当它显示在浏览器上时,它会检查所有复选框,即使其值为 false。它应该检查“checked”键是否为真,否则它应该为假。
<div class="checkbox" *ngFor="let permission of permissions">
<label>
<input type="checkbox"
name="permissions"
[(ngModel)]="permission.checked"
value="{{permission.id}}">
{{permission.name}}
</label>
</div>
Run Code Online (Sandbox Code Playgroud)
我的控制器代码是这样的 https://gist.github.com/eaponiente/cc108bfafb2789229e917283e0b8db09
我试图验证使用表达式提交的电子邮件输入^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$,但它引发了错误 Range out of order in character class at RegExp。我如何使用该表达式进行验证
ngOnInit() {
// created FormGroup using FormBuilder
this.courseForm = this.fb.group({
username: [null, [Validators.required, Validators.pattern('^[a-z0-9_-]{3,16}$')]],
email: [null, [Validators.required, Validators.pattern('^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$')]],
address: (null),
select: (null)
});
Run Code Online (Sandbox Code Playgroud) 我正在使用 Angular4 和 Angular Material2。
我有以下代码
<md-tab-group color="primary">
<md-tab label="Employee">
<app-employee></app-employee>
</md-tab>
<md-tab label="Department">
<app-department></app-department>
</md-tab>
<md-tab label="Attendance">
<app-attendance></app-attendance>
</md-tab>
</md-tab-group>
Run Code Online (Sandbox Code Playgroud)
现在,所有组件均已初始加载,但我想在选择相应选项卡时加载特定组件。
在此演示中,我为自定义验证器创建了一个示例表单,这里有“起始日期”和“截止日期”以及“起始时间”和“截止时间”,工作正常:对于“起始日期”和“截止日期”验证工作正常并显示错误消息。
问题:当选择相同的日期时,例如)2018 年 7 月 21 日作为起始日期,并且“To date e”和“In from Time”为 4:00 AM,“To Time”为 3:00AM,条件得到满足,但没有显示错误消息。在实施过程中出现了一些问题,任何人都可以帮我解决吗?
在 html 中,我给出了验证消息,但没有显示。
To Time:
<input type="time" formControlName="ToTime">
<mat-error *ngIf="DaterForm.get('ToTime').hasError('InValidToTime')">FromTime Should be less than ToTime if choose a same date</mat-error>
Run Code Online (Sandbox Code Playgroud)
在组件中:
DaterForm : FormGroup;
constructor(private fb:FormBuilder){
}
ngOnInit(){
this.DaterForm = this.fb.group(
{
FromDate:['',[AppCustomDirective.fromDateValidator]], // validation working fine
FromTime:[''],
ToDate:['',[AppCustomDirective.ToDateValidator]],// validation working fine
ToTime:['']
},{validator:[AppCustomDirective.timeValidator] // validation not working
}
Run Code Online (Sandbox Code Playgroud)
自定义验证:
import { AbstractControl, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';
export class AppCustomDirective …Run Code Online (Sandbox Code Playgroud) angular2-forms angular angular-reactive-forms angular4-forms angular6
角度版本 5.2.4,Material2 5.2.4
我正在使用这种元素组合:
...以数据源更改时重建的形式。
我可以在初始表单构建中将输入和 mat-datepicker-toggle 设置为禁用或启用。重建表单时,可以设置输入的禁用属性。但是,对于初始表单构建后的任何表单重建,mat-datepicker-toggle 的禁用属性仍保持初始状态(无论是启用还是禁用)。
材料文档指出(我在此处的元素周围使用引号):
与任何标准“输入元素”一样,可以通过添加禁用属性来禁用日期选择器输入。默认情况下,“mat-datepicker”和“mat-datepicker-toggle”将从“输入元素”继承其禁用状态
因此,在之后设置 mat-datepicker-toggle 的禁用/启用状态是我试图解决的问题。
我在下面简化了但有效的代码来展示我最近尝试过的内容。如果您需要更多信息,请告诉我。
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
import { MatDatepickerModule, MatIconModule,
MatInputModule, MatNativeDateModule,} from '@angular/material';
@NgModule({
exports: [ MatDatepickerModule, MatIconModule,
MatInputModule, MatNativeDateModule ]
})
export class MaterialModule { }
@NgModule({
imports: [ BrowserModule, FormsModule, ReactiveFormsModule,
MaterialModule ], …Run Code Online (Sandbox Code Playgroud) 考虑带有输入的 Angular 反应形式。每当输入发生变化时,我们都希望保留其旧值并将其显示在某个地方。下面的代码按照显示的方式执行此操作:
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Reactive Form';
changedValue;
oldValue;
ooldValue;
rform = new FormGroup({
inputOne: new FormControl('chang me')
});
onOneChange(event) {
this.changedValue = event.target.value;
console.log('oneChanged', this.changedValue, 'old value is', this.oldValue);
this.ooldValue = this.oldValue;
setTimeout( ()=>this.oldValue = this.changedValue, 1);
}
}Run Code Online (Sandbox Code Playgroud)
<form [formGroup]="rform">
<label>
One:
<input formControlName="inputOne" (change)="onOneChange($event)"/>
</label>
</form>
<p>
changed value: {{changedValue}}
</p>
<p>
old value: {{ooldValue}}
</p>Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它已通过在代码中保留三个变量来解决,这是不可取的(是的,changedValue可以删除该变量,但仍然有两个变量保留旧值很烦人,不是吗?)。
有没有办法用更少的变量重写代码?Angular 本身有下降的方式来做到这一点吗?
您可以在这里找到代码
javascript angular2-forms angular angular-reactive-forms angular-event-emitter
我已经知道inputa 中的项目FormControl可以被标记dirt或touched通过调用以下任何方法(也许更多): group.markAsTouched(); form.get('control-name').markAsTouched(); form.markAllAsTouched(); form.controls[someIndex].markAsTouched();
但是,我可以看到该markAsTouched方法似乎在输入focus为 then时被调用blur。
有没有办法通过代码达到相同的结果?比方说,当点击一个按钮时。
在这里,您可以看到当前标准行为的 gif,无需表单,您也可以在以下实时示例中自行测试:
https://stackblitz.com/edit/angular-peq11f
对我来说,很明显这种行为应该可以由代码触发,而不仅仅是在blur事件触发时触发
像这样的东西:
<input #myInput>
<button (click)="myInput.markAsTouched()">click</button>
Run Code Online (Sandbox Code Playgroud) angular2-forms angular2-formbuilder angular angular2-form-validation ignite-ui-angular
我是Angular的新手,我试图绑定由模型对象的文本框组成的表单。但我收到类似“未处理的承诺拒绝:模板解析错误:由于它不是'input'的已知属性而无法绑定到'NgModel'的错误”
我在Google投入了大量时间,但仍然存在问题
下面是我的代码。
的HTML:
<div>
<div class="col-sm-6 form-group">
<label class="control-label">Project Name:</label>
<input type="text" class="form-control" id="txtProjName" [(NgModel)]="projectFieldsdtl.PROJECT_NAME" >
</div>
<div class="col-sm-6 form-group">
<label class="control-label">Project Manager Name:</label>
<input type="text" class="form-control" id="txtProjManager" >
</div>
<div class="col-sm-6 form-group">
<label class="control-label">Project Manager Email ID:</label>
<input type="text" class="form-control" id="txtProjManagerMailID" >
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { FormsModule} from '@angular/forms';
import { HttpModule } from '@angular/http';
import {SpotCheckStatusComponent} from './spotcheckstatus.component'; …Run Code Online (Sandbox Code Playgroud) 我有*ngFor一些标签的md-selection-list ,例如[sport,relax,..]
标签存储在中this.tags,所选标签存储在中this.tab
我想防止用户选择5个以上的标签。因此,如果用户选择第5个项目,则应该有一些警报,并且仅当未选中某些已选中项目时,用户才能键入其他标签。
我从这段代码开始,但是没有用。我尝试禁用列表项上的“检查”图标,然后在用户存储了<5个标签之前,不要将其添加到this.tab。问题是我无法禁用此“检查”图标。
这是代码:
clickedOnRow(row){
if(this.tab.length > 5){
this.tags.forEach((item,index) =>{
if(item.text == row.text){
this.selectedList.nativeElement.children[index].children[0].children[1].classList.remove('mat-pseudo-checkbox-checked')
this.selectedList.nativeElement.children[index].children[0].children[1].className = 'mat-pseudo-checkbox'
}
});
}else{
this.tab.push(row.text);
}
}
Run Code Online (Sandbox Code Playgroud)
你怎么看待这件事?如何解决这个问题呢?也许还有其他解决方案,更容易吗?是为了这个问题吗?
谢谢你的帮助
我有一个文本框,我想在某些情况下设置为只读,在少数情况下设置为可编辑字段,因此该字段应根据条件在只读/可编辑之间切换,如何实现?