标签: angular2-forms

ngModel 绑定不适用于多个复选框

我有这样的数据

[{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

angular2-forms angular

2
推荐指数
1
解决办法
6503
查看次数

RegExp 字符类中的范围乱序

我试图验证使用表达式提交的电子邮件输入^([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)

regex angular2-forms angular

2
推荐指数
1
解决办法
1万
查看次数

如何使用 angular4 加载在选项卡中添加的组件?

我正在使用 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)

现在,所有组件均已初始加载,但我想在选择相应选项卡时加载特定组件。

angular2-forms angular

2
推荐指数
1
解决办法
1万
查看次数

反应式表单自定义验证器不显示 Angular6 中的错误

在此演示中,我为自定义验证器创建了一个示例表单,这里有“起始日期”和“截止日期”以及“起始时间”和“截止时间”,工作正常:对于“起始日期”和“截止日期”验证工作正常并显示错误消息。

问题:当选择相同的日期时,例如)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

2
推荐指数
1
解决办法
3331
查看次数

Angular2 Material2 - 如何在表单重建时禁用/启用 mat-datepicker-toggle

角度版本 5.2.4,Material2 5.2.4

我正在使用这种元素组合:

  • 垫式形式场
  • 使用 matinput 指令输入
  • 垫日期选择器
  • 垫日期选择器切换

...以数据源更改时重建的形式。

我可以在初始表单构建中将输入和 mat-datepicker-toggle 设置为禁用或启用。重建表单时,可以设置输入的禁用属性。但是,对于初始表单构建后的任何表单重建,mat-datepicker-toggle 的禁用属性仍保持初始状态(无论是启用还是禁用)。

材料文档指出(我在此处的元素周围使用引号):

与任何标准“输入元素”一样,可以通过添加禁用属性来禁用日期选择器输入。默认情况下,“mat-datepicker”和“mat-datepicker-toggle”将从“输入元素”继承其禁用状态

因此,在之后设置 mat-datepicker-toggle 的禁用/启用状态是我试图解决的问题。

我在下面简化了但有效的代码来展示我最近尝试过的内容。如果您需要更多信息,请告诉我。

应用程序模块.ts

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)

angular2-forms angular-material2

2
推荐指数
1
解决办法
7235
查看次数

角度反应形式在(更改)事件回调上具有旧值

考虑带有输入的 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

2
推荐指数
1
解决办法
7615
查看次数

Angular,有没有办法在没有表单的情况下“markAsTouched”字段?

我已经知道inputa 中的项目FormControl可以被标记dirttouched通过调用以下任何方法(也许更多): 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

2
推荐指数
1
解决办法
9419
查看次数

如何将对象属性绑定到angular2中的文本框

我是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)

angular2-forms angular2-template angular2-ngmodel angular

1
推荐指数
1
解决办法
1万
查看次数

如何在MD选择列表Angular2中设置检查元素的最大限制

我有*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)

你怎么看待这件事?如何解决这个问题呢?也许还有其他解决方案,更容易吗?是为了这个问题吗?

谢谢你的帮助

angular-material angular2-forms angular

1
推荐指数
1
解决办法
2628
查看次数

如何根据条件将文本框设置为只读/可编辑的角度2

我有一个文本框,我想在某些情况下设置为只读,在少数情况下设置为可编辑字段,因此该字段应根据条件在只读/可编辑之间切换,如何实现?

angular2-forms angular2-template

1
推荐指数
1
解决办法
3458
查看次数