angular dart 形式中的 ng-valid 和 ng-invalid 类 不再暴露

ng-valid and ng-invalid classes in angular dart forms are no more exposed

飞镖:1.24.2; Angular:4.0.0; 我根据 .ng-valid.ng-invalid class 以 angular 形式创建了一些 CSS 规则。但是,在最近的版本中,似乎 ng-validng-invalid classes 不再公开,所以我的 CSS 规则不再起作用。 这是对的吗? 如果是,我该如何绕过此更改?

Edit1:测试用例 我只是在 IDE (WebStorm) 中生成了一个带有 angular 和 angular-material 的全新项目。它生成一个简单的待办事项应用程序。我拿了 todo_list_component.html 并用 <form> </form> 标签包裹了整个内容。在 todo_list_component.dart 中,我为 angular_forms 添加了一个导入,并将 formDirectives 添加到指令列表中。 在 dartium 中检查表单 no ng-valid class 已添加。唯一添加的 class,在我的例子中是:class="_ngcontent-umj-2"

Edit2:快捷方式 不是很优雅,但工作:

<form #form="ngForm" [class.ng-valid]="form.valid" [class.ng-invalid]="!form.valid">

不知道有没有曝光

首先我建议您使用 "Model driven forms" - 并在您的组件中设置验证。在我看来,它对 UnitTests 更好,更容易处理。

这里有一个例子:

指定 CSS (test.component.css) class:

.error {
  border: 2px solid red;     
}

组件(test.component.ts):

imports ...;

@Component({
selector: 'test-component',
templateUrl: 'test.component.html',
styleUrls: ['./test.component.css']
})
export class TestComponent implements OnInit {

 form: FormGroup;

 constructor(private navCtrl: NavController, private auth: AuthService, private toast: ToastController, private fb: FormBuilder) {

 }

 ngOnInit() {
  this.form = this.fb.group({
   email: ['', [
     Validators.required,
     Validators.email]],
   password: ['', [
     Validators.required,
     Validators.minLength(6)]],
 });
}

您的模板 (test.component.html) 如下所示:

<form [formGroup]="form" (ngSubmit)="login()" [ngClass]="{'error': !form.valid}">
  *** YOUR FORM DIV'S HERE ***
</form>

我不知道这是否也适用于 Dart。但正如 Verena 评论的那样,如果您上传一些代码,我们可以为您提供最大帮助。

是的,此行为在 angular_forms 的最新版本中发生了变化。

以前,NgControlStatus 指令包含在 formDirectives 的列表中。但是,这导致每个使用表单的组件都为这些主机绑定付出代价。

现在,如果您想要这种行为,您需要将 NgControlStatus 显式包含在 @Componentdirectives 列表中。

https://github.com/dart-lang/angular/blob/master/angular_forms/lib/src/directives/ng_control_status.dart#L15