2017-07-24 92 views
0

我從Grails背景來到Angular,您將在一個地方定義您的業務規則驗證與域模型。 GORM ....所以當我通過Ionic來到Angular時,我很驚訝沒有看到熟悉的東西。我在這裏錯過了什麼嗎?有沒有更好的辦法?爲什麼在組件/表單中的角度驗證不在域模型上執行一次?

+0

Isnt Grails是一個Java Web框架嗎?我看不到Java世界和Javascript世界之間的任何關係 - 或者我錯過了一些東西 –

+0

嗯,這是驗證的分散化,使得我試圖強調重複的努力。你也可以讓組件1和組件2有不同的規則,例如1有a,b,c,2有a,b,d。導致一團糟。是的,Grails是一個完整的堆棧框架,包含Java/Spring/Hibernate。 – JGFMK

回答

1

您可以在任何情況下實施驗證。只需在角度表單和您的域名之間添加1個圖層即可。 一般來說,Angular不會規定應用程序應該以何種方式工作。它只是爲您提供與瀏覽器和API交互的工具。

您始終可以實施Domain#valid()方法並通過Reactive Forms更新字段。

@Component({}) 
export class MyComponent implements OnInit{ 

    public form: Form = this.fb.group({ 
     fName: ['', []], 
     lName: ['', []] 
    }); 

    constructor(fb: FormBuilder){} 

    ngOnInit(){ 
     this.form.valueChanges.subscribe((form) => { 
      let entity: Entity = new Entity(form); 
      let errors: ValidationErrors = entity.valid(); 
      if(errors.length){ 
       this.form.setErrors(errors); 
       this.form.updateValueAndValidity(); 
      } 
     }); 
    } 
} 
+0

Entity/EntityError - 這些是什麼?我從這裏理解updateValueAndValidity https://angular.io/api/forms/AbstractControl – JGFMK

+1

這只是僞代碼。實體 - 你自己的類,它可以是'class UserEntity implements IEntity {}',其中interface IEntity {valid():EntityError []; }'。 'EntityError'再次只是抽象/接口,可以提供給Angular的形式'setErrors()'方法。糟糕,更新了代碼示例,因爲我在那裏有錯字。 –

+0

非常感謝。對於其他人.. https://angular.io/api/forms/AbstractControl#setErrors ... https://angular.io/api/forms/ValidationErrors - – JGFMK

相關問題