AJ_*_*AJ_ 17 javascript forms form-control angular
我正在使用Angular2-rc5,我目前在登录页面上收到错误.我正在尝试创建一个表单,但是控制台抛出异常告诉我formcontroll即使我在init上创建它也无法找到我的s.知道我为什么会收到这个错误吗?
登录组件
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormControl, FormBuilder, Validators } from '@angular/forms';
import { LoginService } from './login.service';
import { User } from '../../models/user';
@Component({
selector: 'login',
providers: [LoginService],
templateUrl: './login.component.html',
styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {
private loginForm: FormGroup; // our model driven form
private submitted: boolean; // keep track on whether form is submitted
private events: any[] = []; // use later to display form changes
constructor(private fb: FormBuilder, private ls:LoginService){
}
ngOnInit(){
this.loginForm = new FormGroup({
email: new FormControl('',[<any>Validators.required]),
password: new FormControl('', [<any>Validators.required, <any>Validators.minLength(6)]),
rememberMe: new FormControl()
});
}
save(model: User, isValid: boolean) {
console.log("Test");
console.log(model, isValid);
}
// Login in user
login(email: any, password: any){
this.ls.login(email, password, false);
}
}
Run Code Online (Sandbox Code Playgroud)
page.html中
<div id="login-page">
<div class="form-wrapper">
<form class="login-form" [formGroup]="loginForm" novalidate (ngSubmit)="save(loginForm.value, loginForm.valid)">
<div >
<div class="input-field col s12 center">
<p class="center login-form-text">Login page</p>
</div>
</div>
<div >
<div class="input-field col s12">
<input id="email" type="email">
<label class="center-align" for="email" formControlName="email">Email</label>
</div>
</div>
<div >
<div class="input-field col s12">
<input id="password" type="password">
<label class="center" for="password" formControlName="password">Password</label>
</div>
</div>
<div >
<div class="input-field col s12 m12 l12 login-text">
<input id="remember-me" type="checkbox" formControlName="rememberMe">
<label for="remember-me">Remember me</label>
</div>
</div>
<div >
<div class="input-field col s12">
<ahref="index.html">Login</a>
</div>
</div>
<div >
<div >
<p><a href="page-register.html">Register Now!</a></p>
</div>
<div >
<p><a href="page-forgot-password.html">Forgot password ?</a></p>
</div>
</div>
</form>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
例外
EXCEPTION:未捕获(在承诺中):错误:./LoginComponent类中的错误LoginComponent - 内联模板:13:45由以下原因引起:没有表单控件的值访问器,名称为:'email'.....
ppo*_*ski 29
您正在添加formControlName标签而不是输入.
你有这个:
<div >
<div class="input-field col s12">
<input id="email" type="email">
<label class="center-align" for="email" formControlName="email">Email</label>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
试试这个:
<div >
<div class="input-field col s12">
<input id="email" type="email" formControlName="email">
<label class="center-align" for="email">Email</label>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
同时更新其他输入字段.
Owe*_*vin 23
对于在angular 9+ 中遇到此问题的任何人
如果您不声明组件或导入声明组件的模块,也可能会遇到此问题。
让我们考虑一下您打算使用ng-select但忘记导入它的情况,Angular 将抛出错误“无值访问器...”
我在下面的 stackblitz 演示中重现了这个错误。
小智 14
对于具有角度材质的UnitTest angular 2,您必须在导入部分中添加MatSelectModule模块.
import { MatSelectModule } from '@angular/material';
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ CreateUserComponent ],
imports : [ReactiveFormsModule,
MatSelectModule,
MatAutocompleteModule,......
],
providers: [.........]
})
.compileComponents();
}));
Run Code Online (Sandbox Code Playgroud)
SKL*_*SKL 11
在某些情况下,您可能会错过添加NG_VALUE_ACCESSOR可重用组件作为提供者。
@Component({
selector: 'app-reusable',
templateUrl: './reusable.component.html',
styleUrls: ['./reusable.component.scss'],
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => ReusableComponent),
multi: true,
},
],
})
Run Code Online (Sandbox Code Playgroud)
就我而言,我使用的是离子,我试图用茉莉花业力对离子输入进行单元测试。运行测试时,我在 karma 浏览器中收到无值访问器错误。所以我只是将其添加ngDefaultControl到离子输入中,它解决了问题。
<ion-input class="password" [(ngModel)]="user.password" name="password"
type="password" #pw="ngModel" required ngDefaultControl>
</ion-input>
Run Code Online (Sandbox Code Playgroud)
如果您必须为formControl. 就像 Ant Design 复选框。运行测试时可能会抛出此错误。您可以使用ngDefaultControl
<label nz-checkbox formControlName="isEnabled" ngDefaultControl>
Hello
</label>
<nz-switch nzSize="small" formControlName="mandatory" ngDefaultControl></nz-switch>
Run Code Online (Sandbox Code Playgroud)
或者
您需要将其移动formControlName="controlName"到<mat-radio-group>包装器而不是将其绑定到单个<mat-radio-button>元素
| 归档时间: |
|
| 查看次数: |
47617 次 |
| 最近记录: |