Chỉ số đầu vào bootstrap
Xác thực đầu vào của người dùng là một phần thiết yếu của bất kỳ ứng dụng web mạnh mẽ nào. Angular 4 làm cho nó trở nên đặc biệt dễ dàng cho cả biểu mẫu dựa trên mẫu và biểu mẫu phản ứng. Trong bài viết này, Nhà phát triển góc tự do hàng đầu Igor Geshoski hướng dẫn chúng ta các cách tiếp cận khác nhau trong xác thực biểu mẫu Angular 4 và chỉ ra cách xác thực biểu mẫu phức tạp có thể được thực hiện dễ dàng như thế nào Show
Qua Igor Geshoski Igor đã trau dồi các thuật toán và kỹ năng giải quyết vấn đề của mình trên các ứng dụng doanh nghiệp dựa trên Java quy mô lớn trong khoảng 5 năm ĐĂNG LẠI ĐĂNG LẠI Trên web, một số phần tử đầu vào của người dùng sớm nhất là nút, hộp kiểm, kiểu nhập văn bản và nút radio. Cho đến tận ngày nay, những yếu tố này vẫn được sử dụng trong các ứng dụng web hiện đại mặc dù tiêu chuẩn HTML đã đi một chặng đường dài so với định nghĩa ban đầu của nó và hiện cho phép tất cả các loại tương tác ưa thích. Xác thực đầu vào của người dùng là một phần thiết yếu của bất kỳ ứng dụng web mạnh mẽ nào Các biểu mẫu trong ứng dụng Góc có thể tổng hợp trạng thái của tất cả các đầu vào dưới biểu mẫu đó và cung cấp trạng thái tổng thể như trạng thái xác thực của biểu mẫu đầy đủ. Điều này có thể thực sự hữu ích để quyết định xem đầu vào của người dùng sẽ được chấp nhận hay từ chối mà không cần kiểm tra riêng từng đầu vào Trong bài viết này, bạn sẽ tìm hiểu cách bạn có thể làm việc với các biểu mẫu và thực hiện xác thực biểu mẫu một cách dễ dàng trong ứng dụng Angular của mình Trong Angular 4, có hai loại biểu mẫu khác nhau có sẵn để làm việc với. các hình thức dựa trên mẫu và phản ứng. Chúng ta sẽ xem xét từng loại biểu mẫu bằng cách sử dụng cùng một ví dụ để xem những thứ giống nhau có thể được triển khai theo những cách khác nhau như thế nào. Sau đó, trong bài viết này, chúng ta sẽ xem xét một cách tiếp cận mới về cách thiết lập và làm việc với các biểu mẫu lồng nhau Hình thức góc 4Trong Angular 4, bốn trạng thái sau thường được sử dụng bởi các biểu mẫu
Chúng ta hãy xem một ví dụ cơ bản của một biểu mẫu
Thông số kỹ thuật cho ví dụ này là như sau
Mục tiêu cuối cùng là thực hiện đầy đủ đặc tả được xác định Biểu mẫu hướng mẫuCác biểu mẫu hướng mẫu rất giống với các biểu mẫu trong AngularJS (hoặc Angular 1, như một số đề cập đến nó). Vì vậy, ai đó đã từng làm việc với các biểu mẫu trong AngularJS sẽ rất quen thuộc với cách tiếp cận này để làm việc với các biểu mẫu Với việc giới thiệu các mô-đun trong Angular 4, mỗi loại biểu mẫu cụ thể nằm trong một mô-đun riêng biệt và chúng ta phải xác định rõ ràng loại nào chúng ta sẽ sử dụng bằng cách nhập mô-đun thích hợp. Mô-đun đó dành cho các biểu mẫu dựa trên mẫu là FormsModule. Nói như vậy, bạn có thể kích hoạt các biểu mẫu dựa trên mẫu như sau
Như được trình bày trong đoạn mã này, trước tiên chúng ta phải nhập mô-đun trình duyệt vì nó “cung cấp các dịch vụ cần thiết để khởi chạy và chạy một ứng dụng trình duyệt. ” (từ tài liệu Angular 4). Sau đó, chúng tôi nhập FormsModule cần thiết để kích hoạt các biểu mẫu dựa trên mẫu. Và cuối cùng là khai báo thành phần gốc, AppComponent, trong các bước tiếp theo chúng ta sẽ triển khai biểu mẫu Hãy nhớ rằng trong ví dụ này và các ví dụ sau, bạn phải đảm bảo rằng ứng dụng được khởi động đúng cách bằng phương pháp 7
Chúng ta có thể giả sử rằng AppComponent (ứng dụng. thành phần. ts) trông giống như thế này
Vị trí mẫu của thành phần này trong ứng dụng. thành phần. tpl. html và chúng tôi có thể sao chép mẫu ban đầu vào tệp này Lưu ý rằng mỗi phần tử đầu vào phải có thuộc tính 8 để được xác định chính xác trong biểu mẫu. Mặc dù đây có vẻ giống như một biểu mẫu HTML đơn giản, nhưng chúng tôi đã xác định một biểu mẫu được hỗ trợ bởi Angular 4 (có thể bạn chưa thấy). Khi FormsModule được nhập, Angular 4 sẽ tự động phát hiện phần tử HTML 9 và gắn thành phần NgForm vào phần tử đó (bởi 0 của thành phần NgForm). Đó là trường hợp trong ví dụ của chúng tôi. Mặc dù biểu mẫu Angular 4 này được khai báo, nhưng tại thời điểm này, nó không biết bất kỳ đầu vào nào được hỗ trợ của Angular 4. Angular 4 không quá xâm lấn để đăng ký từng phần tử HTML 1 với tổ tiên 9 gần nhấtChìa khóa cho phép phần tử đầu vào được chú ý dưới dạng phần tử Angular 4 và được đăng ký với thành phần NgForm là chỉ thị NgModel. Vì vậy, chúng ta có thể mở rộng ứng dụng. thành phần. tpl. mẫu html như sau
Bằng cách thêm chỉ thị NgModel, tất cả các đầu vào được đăng ký vào thành phần NgForm. Với điều này, chúng tôi đã xác định một biểu mẫu Angular 4 hoạt động đầy đủ và cho đến nay, rất tốt, nhưng chúng tôi vẫn không có cách nào để truy cập thành phần NgForm và các chức năng mà nó cung cấp. Hai chức năng chính được cung cấp bởi NgForm là
To expose the NgForm, we can add the following to the 02 directive, which offered the AngularJS form functionalities (just grouping of the controls, not all 9 capabilities like posting to the server) but could be placed on any element. Also, in AngularJS, nesting of forms (when I say forms, I mean NgForm) was available out of the box. Just by declaring a tree of couple of elements with the 02 directive, the state of each form was propagated upwards to the root element.Trong phần tiếp theo, chúng ta sẽ xem xét một số tùy chọn về cách lồng các biểu mẫu. Tôi muốn chỉ ra rằng chúng ta có thể phân biệt hai kiểu lồng nhau. trong cùng một thành phần và trên các thành phần khác nhau Làm tổ trong cùng một thành phầnNếu bạn xem ví dụ mà chúng tôi đã triển khai với phương pháp tiếp cận dựa trên mẫu và phản ứng, bạn sẽ nhận thấy rằng chúng tôi có hai vùng chứa điều khiển bên trong, “vị trí” và “số điện thoại. ” Để tạo vùng chứa đó, để lưu trữ các giá trị trong một đối tượng thuộc tính riêng biệt, chúng tôi đã sử dụng các chỉ thị NgModelGroup, FormGroupName và FormArrayName. Nếu bạn xem kỹ định nghĩa của từng lệnh, bạn có thể nhận thấy rằng mỗi lệnh đều mở rộng lớp ControlContainer (trực tiếp hoặc gián tiếp). Chà, bạn biết gì không, hóa ra điều này là đủ để cung cấp chức năng mà chúng tôi yêu cầu, gói gọn trạng thái của tất cả các điều khiển bên trong và truyền trạng thái đó cho cấp độ gốc Đối với biểu mẫu hướng mẫu, chúng ta cần thực hiện các thay đổi sau 6Chúng tôi đã thêm thành phần ShowErrors vào từng nhóm để chỉ hiển thị các lỗi liên quan trực tiếp đến nhóm đó. Vì chúng tôi đã chuyển trình xác nhận 05 và 06 sang một cấp độ khác nên chúng tôi cũng cần cập nhật chúng một cách thích hợp 7Và số điện thoại-số-validator. chỉ thị. ts để 8Bạn có thể thử ví dụ đầy đủ với các biểu mẫu dựa trên mẫu trong Plunker này Và đối với các dạng phản ứng, chúng ta sẽ cần một số thay đổi tương tự 9Các thay đổi tương tự từ 07 và 08 là bắt buộc đối với trình xác thực 05 và 06 trong CustomValidators để định vị chính xác các điều khiểnVà cuối cùng, chúng ta cần sửa đổi cấu trúc của FormGroup thành 0Và bạn đã có nó—chúng tôi cũng đã cải thiện việc xác thực cho các biểu mẫu phản ứng và như mong đợi, Plunker cho ví dụ này Làm tổ trên các thành phần khác nhauNó có thể gây sốc cho tất cả các nhà phát triển AngularJS, nhưng trong Angular 4, việc lồng các biểu mẫu trên các thành phần khác nhau không hoạt động ngay lập tức. Tôi sẽ thành thật với bạn; . Nguyên tắc thực thi chính của Angular4 là luồng dữ liệu một chiều, từ trên xuống dưới thông qua cây thành phần. Toàn bộ khung được thiết kế như vậy, trong đó hoạt động quan trọng, phát hiện thay đổi, được thực hiện theo cách tương tự, từ trên xuống dưới. Nếu chúng tôi hoàn toàn tuân theo nguyên tắc này, chúng tôi sẽ không gặp vấn đề gì và tất cả các thay đổi sẽ được giải quyết trong một chu kỳ phát hiện đầy đủ. Đó là ý tưởng, ít nhất. Để kiểm tra xem luồng dữ liệu một chiều có được triển khai chính xác hay không, những người tốt bụng trong nhóm Angular 4 đã triển khai một tính năng mà sau mỗi chu kỳ phát hiện thay đổi, trong khi ở chế độ phát triển, một vòng phát hiện thay đổi bổ sung được kích hoạt để kiểm tra xem có ràng buộc nào không . Điều này có nghĩa là gì, hãy nghĩ về một cây các thành phần (C1, C2, C3, C4) như trong Hình. 1, phát hiện thay đổi bắt đầu ở thành phần C1, tiếp tục ở thành phần C2 và kết thúc ở thành phần C3 Nếu chúng tôi có một số phương pháp trong C3 với tác dụng phụ làm thay đổi một số liên kết trong C1, điều đó có nghĩa là chúng tôi đang đẩy dữ liệu lên trên, nhưng phát hiện thay đổi cho C1 đã được thông qua. Khi làm việc ở chế độ nhà phát triển, vòng thứ hai bắt đầu và nhận thấy sự thay đổi trong C1 do thực thi phương thức trong một số thành phần con. Sau đó, bạn gặp rắc rối và có thể bạn sẽ thấy ngoại lệ "Biểu thức đã thay đổi sau khi được kiểm tra". Bạn chỉ có thể tắt chế độ phát triển và sẽ không có ngoại lệ, nhưng vấn đề sẽ không được giải quyết; Khi bạn biết điều đó, hãy nghĩ xem chúng ta đang làm gì nếu chúng ta tổng hợp trạng thái biểu mẫu. Đúng vậy, dữ liệu được đẩy lên trên cây thành phần. Ngay cả khi làm việc với các biểu mẫu đơn cấp, việc tích hợp các điều khiển biểu mẫu ( 11) và bản thân biểu mẫu cũng không được tốt lắm. Chúng kích hoạt một chu kỳ phát hiện thay đổi bổ sung khi đăng ký hoặc cập nhật giá trị của điều khiển (việc này được thực hiện bằng cách sử dụng lời hứa đã giải quyết, nhưng hãy giữ bí mật). Tại sao lại cần một vòng bổ sung? . Tuy nhiên, có thể đôi khi, các biểu mẫu lồng nhau trên nhiều thành phần là một tính năng bắt buộc và chúng tôi cần nghĩ ra giải pháp để hỗ trợ yêu cầu nàyVới những gì chúng ta biết cho đến nay, ý tưởng đầu tiên xuất hiện trong đầu là sử dụng các biểu mẫu phản ứng, tạo cây biểu mẫu đầy đủ trong một số thành phần gốc và sau đó chuyển các biểu mẫu con cho các thành phần con làm đầu vào. Bằng cách này, bạn đã kết hợp chặt chẽ cha mẹ với các thành phần con và làm lộn xộn logic nghiệp vụ của thành phần gốc với việc xử lý việc tạo tất cả các biểu mẫu con. Thôi nào, chúng tôi là những chuyên gia, tôi chắc chắn rằng chúng tôi có thể tìm ra cách tạo các thành phần hoàn toàn biệt lập với các biểu mẫu và cung cấp một cách biểu mẫu để truyền trạng thái tới bất kỳ ai là phụ huynh Tất cả điều này đang được nói, đây là một chỉ thị cho phép các biểu mẫu Angular 4 lồng nhau (được triển khai vì nó cần thiết cho một dự án) 1Ví dụ trong GIF sau đây cho thấy một thành phần 12 có chứa 13 và bên trong biểu mẫu đó, có một thành phần lồng nhau khác, 14. 14 chứa 16, đã lồng vào nhau 17, 18 và một thành phần ( 19) có một cây dạng phản ứng trong đó và một thành phần ( 20) chứa một biểu mẫu được tách biệt với tất cả các dạng khác. Khá lộn xộn, tôi biết, nhưng tôi muốn tạo một kịch bản khá phức tạp để thể hiện chức năng của chỉ thị nàyVí dụ được triển khai trong Plunker này Các tính năng mà nó cung cấp là
Lệnh này cho phép một biểu mẫu trong thành phần con đăng ký với NestableForm gốc đầu tiên, bất kể biểu mẫu gốc có được khai báo trong cùng một thành phần hay không. Chúng tôi sẽ đi vào chi tiết của việc thực hiện Trước hết, chúng ta hãy xem hàm tạo. Đối số đầu tiên là 2Cái này tra cứu phụ huynh NestableFormDirective đầu tiên. @SkipSelf, để không khớp với chính nó và @Optional vì nó có thể không tìm thấy cha mẹ, trong trường hợp ở dạng gốc. Bây giờ chúng ta có một tham chiếu đến biểu mẫu có thể lồng nhau của cha mẹ Đối số thứ hai là 3Bộ tiêm được sử dụng để truy xuất FormGroup 21 hiện tại (mẫu hoặc phản ứng)Và đối số cuối cùng là 4để lấy giá trị xác định xem biểu mẫu này có bị cô lập khỏi cây biểu mẫu không Tiếp theo, trên 22 dưới dạng một hành động bị hoãn lại (bạn có nhớ luồng dữ liệu đảo ngược không?), Nhóm Biểu mẫu hiện tại được giải quyết, một điều khiển FormArray mới có tên là 23 được đăng ký cho Nhóm Biểu mẫu này (nơi các biểu mẫu con sẽ được đăng ký) và là hành động cuối cùng, Hành động 24 được thực thi khi biểu mẫu bị hủy. Khi hủy, một lần nữa dưới dạng hành động bị hoãn, biểu mẫu hiện tại bị xóa khỏi phần gốc (hủy đăng ký)Chỉ thị cho các biểu mẫu có thể lồng nhau có thể được tùy chỉnh thêm cho một nhu cầu cụ thể—có thể xóa hỗ trợ cho các biểu mẫu phản ứng, đăng ký từng biểu mẫu con dưới một tên cụ thể (không phải trong một mảng CHILD_FORMS), v.v. Việc triển khai lệnh NestableForm này đã đáp ứng các yêu cầu của dự án và được trình bày ở đây như vậy. Nó bao gồm một số trường hợp cơ bản như thêm một biểu mẫu mới hoặc xóa một biểu mẫu hiện có một cách linh hoạt (*ngIf) và truyền trạng thái của biểu mẫu cho cha mẹ. Về cơ bản, điều này tập trung vào các hoạt động có thể được giải quyết trong một chu kỳ phát hiện thay đổi (có hoãn hay không) Nếu bạn muốn một số tình huống nâng cao hơn như thêm xác thực có điều kiện vào một số đầu vào (e. g. [required]=”someCondition”) sẽ yêu cầu 2 vòng phát hiện thay đổi, nó sẽ không hoạt động do quy tắc “độ phân giải một chu kỳ phát hiện” do Angular 4 áp đặt Dù sao, nếu bạn có kế hoạch sử dụng chỉ thị này hoặc thực hiện một số giải pháp khác, hãy hết sức cẩn thận với những điều được đề cập liên quan đến phát hiện thay đổi. Tại thời điểm này, đây là cách triển khai Angular 4. Nó có thể thay đổi trong tương lai-chúng ta không thể biết. Thiết lập hiện tại và hạn chế được thi hành trong Angular 4 đã được đề cập trong bài viết này có thể là nhược điểm hoặc lợi ích. Nó vẫn còn để được nhìn thấy Biểu mẫu được thực hiện dễ dàng với Angular 4Như bạn có thể thấy, nhóm Angular đã thực hiện rất tốt công việc cung cấp nhiều chức năng liên quan đến biểu mẫu. Tôi hy vọng rằng bài đăng này sẽ đóng vai trò là một hướng dẫn đầy đủ để làm việc với các loại biểu mẫu khác nhau trong Angular 4, đồng thời cung cấp cái nhìn sâu sắc về một số khái niệm nâng cao hơn như lồng các biểu mẫu và quy trình phát hiện thay đổi Mặc dù có tất cả các bài đăng khác nhau liên quan đến các biểu mẫu Angular 4 (hoặc bất kỳ chủ đề Angular 4 nào khác cho vấn đề đó), theo tôi, điểm khởi đầu tốt nhất là tài liệu chính thức của Angular 4. Ngoài ra, những người ở góc có tài liệu hay trong mã của họ. Nhiều lần, tôi đã tìm ra giải pháp chỉ bằng cách xem mã nguồn của họ và tài liệu ở đó, không cần Google hay bất cứ thứ gì. Về việc lồng các biểu mẫu, đã thảo luận trong phần trước, tôi tin rằng bất kỳ nhà phát triển AngularJS nào bắt đầu học Angular 4 sẽ vấp phải vấn đề này vào một lúc nào đó, đó là nguồn cảm hứng của tôi để viết bài đăng này Như chúng ta cũng đã thấy, có hai loại biểu mẫu và không có quy tắc nghiêm ngặt nào mà bạn không thể sử dụng chúng cùng nhau. Thật tuyệt khi giữ cho cơ sở mã sạch sẽ và nhất quán, nhưng đôi khi, có thể thực hiện điều gì đó dễ dàng hơn với các biểu mẫu dựa trên mẫu và đôi khi, đó là cách khác. Vì vậy, nếu bạn không ngại kích thước gói lớn hơn một chút, tôi khuyên bạn nên sử dụng bất cứ thứ gì bạn cho là phù hợp hơn trong từng trường hợp. Chỉ cần không trộn chúng trong cùng một thành phần vì nó có thể sẽ dẫn đến một số nhầm lẫn Plunkers được sử dụng trong bài đăng này
Có liên quan. nút thông minh. Xác thực biểu mẫu js Hiểu những điều cơ bảnAngularJS là gì?Angular là một khung JavaScript cố định để xây dựng các ứng dụng web động. Nó sử dụng khuôn mẫu, nội xạ phụ thuộc và liên kết dữ liệu để biến HTML thành một môi trường định hướng phát triển ứng dụng Xác thực mẫu là gì?Xác thực biểu mẫu là quá trình xác minh rằng đầu vào của người dùng hợp lệ để được lưu trữ và thực hiện theo. Nếu dữ liệu không xác thực được, người dùng sẽ được hiển thị lại biểu mẫu để sửa các lỗi nhập đã chỉ định thẻ Hình thức xác thực gócNgười làm việc tự do? Tìm công việc tiếp theo của bạn. Công việc tự do từ xa Xem thông tin đầy đủ Igor Geshoski Nhà phát triển góc cạnh tự do Thông tin về các Tác giả Igor đã làm việc trên các ứng dụng doanh nghiệp dựa trên Java quy mô lớn trong khoảng năm năm. Trong sự nghiệp của mình, anh ấy đã tham gia vào các dự án với logic kinh doanh rất thách thức. Với nền tảng vững chắc về thuật toán và giải quyết vấn đề, Igor luôn nỗ lực hướng tới các giải pháp chung và tối ưu nhất đáp ứng các yêu cầu chất lượng khắt khe nhất. Anh ấy được coi là một cầu thủ của đội và là người hỗ trợ thường xuyên cho các đồng đội của anh ấy ở mỗi đội mà anh ấy tham gia Thuê Igor Bình luậnSamseen Điều này là rất lớn. Tốt lắm Igor Samseen Điều này là rất lớn. Tốt lắm Igor Leonardo Costa Borges Bài báo tuyệt vời. Nó thực sự giúp tôi quyết định về các dạng Góc. Cảm ơn Leonardo Costa Borges Bài báo tuyệt vời. Nó thực sự giúp tôi quyết định về các dạng Góc. Cảm ơn Gampesh Sahu thực sự bài viết rất hay. Cảm ơn rất nhiều Gampesh Sahu thực sự bài viết rất hay. Cảm ơn rất nhiều Najib Đã lưu vào mục yêu thích của tôi. Cảm ơn Najib Đã lưu vào mục yêu thích của tôi. Cảm ơn Muhammad Inaam Munir -------------------------------------------------- . Muhammad Inaam Munir -------------------------------------------------- . Điều này có thể thực hiện được nhờ thuộc tính exportAs của trình trang trí Thành phần. -------------------------------------------------- . Tôi hiểu rằng #someVariableName là một biến mẫu mà qua đó chúng ta có thể sử dụng các biến và hàm của các thành phần. Nhưng tại sao trong trường hợp này chúng ta lại gán nó bằng "ngForm"? Raphi Stein Tôi đã học được rất nhiều điều thú vị này từ bài viết chi tiết, được viết tốt này. Cảm ơn. Về cùng một chủ đề, điều này đã giúp https. //Blog. đại học góc cạnh. io/giới thiệu-to-angular-2-forms-template-Driven-vs-model-Driven/ Raphi Stein Tôi đã học được rất nhiều điều thú vị này từ bài viết chi tiết, được viết tốt này. Cảm ơn. Về cùng một chủ đề, điều này đã giúp https. //Blog. đại học góc cạnh. io/giới thiệu-to-angular-2-forms-template-Driven-vs-model-Driven/ Igor Geshoski Xin chào @muhammadinaammunir. disqus, với '#myForm="ngForm"', chúng tôi sẽ nhận được phiên bản chỉ thị 'ngForm' một cách cụ thể. Bạn có thể xem các tài liệu sau về biến mẫu và thuộc tính 'exportAs'. https. // góc cạnh. io/guide/template-syntax#ref-vars https. // góc cạnh. io/api/core/Chỉ thị Igor Geshoski Xin chào @muhammadinaammunir. disqus, với '#myForm="ngForm"', chúng tôi sẽ nhận được phiên bản chỉ thị 'ngForm' một cách cụ thể. Bạn có thể xem các tài liệu sau về biến mẫu và thuộc tính 'exportAs'. https. // góc cạnh. io/guide/template-syntax#ref-vars https. // góc cạnh. io/api/core/Chỉ thị UClamp Rajan bài báo rất hay. Tôi đã làm theo hướng dẫn về biểu mẫu phản ứng, nhưng tôi bị mất thông số luồng ăn. yêu cầuChiều dài và thông số. bắt buộcmẫu. Cả hai đều được sử dụng như thế nào? UClamp Rajan bài báo rất hay. Tôi đã làm theo hướng dẫn về biểu mẫu phản ứng, nhưng tôi bị mất thông số luồng ăn. yêu cầuChiều dài và thông số. bắt buộcmẫu. Cả hai đều được sử dụng như thế nào? Alex Yongdzin Cảm ơn đã giải thích về logic ngForm. Cách tiếp cận dựa trên mẫu thực sự rất khó hiểu vì mọi thứ đều bị ẩn ở đó. Các hình thức phản ứng dễ hiểu và kiểm soát hơn nhiều Alex Yongdzin Cảm ơn đã giải thích về logic ngForm. Cách tiếp cận dựa trên mẫu thực sự rất khó hiểu vì mọi thứ đều bị ẩn ở đó. Các hình thức phản ứng dễ hiểu và kiểm soát hơn nhiều Igor Geshoski Xin chào @uclamprajan. disqus, tôi thấy rằng tôi đã bỏ qua phần đó. ) Đối tượng params được cung cấp cụ thể bởi từng trình xác thực, đối tượng này chứa các thuộc tính giải thích kết quả xác thực (bối cảnh), do đó, nó cụ thể cho từng trình xác thực. Trình xác thực 'minLength' (được cung cấp bởi Angular) cung cấp các thuộc tính 'requiredLength' và 'actualLength'. Thế là đủ cho một thông báo lỗi xác thực tốt. Tương tự, trình xác thực 'mẫu' (cũng do Angular cung cấp) cung cấp các thuộc tính 'requiredPattern' và 'actualValue' Igor Geshoski Xin chào @uclamprajan. disqus, tôi thấy rằng tôi đã bỏ qua phần đó. ) Đối tượng params được cung cấp cụ thể bởi từng trình xác thực, đối tượng này chứa các thuộc tính giải thích kết quả xác thực (bối cảnh), do đó, nó cụ thể cho từng trình xác thực. Trình xác thực 'minLength' (được cung cấp bởi Angular) cung cấp các thuộc tính 'requiredLength' và 'actualLength'. Thế là đủ cho một thông báo lỗi xác thực tốt. Tương tự, trình xác thực 'mẫu' (cũng do Angular cung cấp) cung cấp các thuộc tính 'requiredPattern' và 'actualValue' Dhanashri Dhoke bài viết rất hay. Cảm ơn Dhanashri Dhoke bài viết rất hay. Cảm ơn ồn ào rathore cảm ơn vì bài viết tốt đẹp ồn ào rathore cảm ơn vì bài viết tốt đẹp đánh dấu M bài đăng tuyệt vời. Giải pháp rất tao nhã cho các hình thức lồng nhau. Đây chính xác là những gì tôi đang tìm kiếm đánh dấu M bài đăng tuyệt vời. Giải pháp rất tao nhã cho các hình thức lồng nhau. Đây chính xác là những gì tôi đang tìm kiếm Umesh Pathak bài viết tuyệt vời thực sự Umesh Pathak bài viết tuyệt vời thực sự thợ rèn kiểm soát riêng tư @Input() là gì. Trừu TượngKiểm SoátChỉ Thị. Kiểm soát trừu tượng; . Làm ơn làm rõ thợ rèn kiểm soát riêng tư @Input() là gì. Trừu TượngKiểm SoátChỉ Thị. Kiểm soát trừu tượng; . Làm ơn làm rõ Igor Geshoski Đó là kiểu kết hợp trong Type script (https. //www. bản đánh máy. org/docs/sổ tay/loại nâng cao. tìm kiếm html cho "Các loại liên minh"). Loại kết hợp được sử dụng để làm cho thành phần có thể hỗ trợ mẫu và biểu mẫu phản ứng Igor Geshoski Đó là kiểu kết hợp trong Type script (https. //www. bản đánh máy. org/docs/sổ tay/loại nâng cao. tìm kiếm html cho "Các loại liên minh"). Loại kết hợp được sử dụng để làm cho thành phần có thể hỗ trợ mẫu và biểu mẫu phản ứng thợ rèn Cảm ơn Igor. Đánh giá cao phản ứng kịp thời. Chúc mừng thợ rèn Cảm ơn Igor. Đánh giá cao phản ứng kịp thời. Chúc mừng Truyền thông Xiêm La Thanks for this article. Very detailed and helpful. I am having some strange issues however. I am trying to create a Password Mismatch validation for Password and Confirm Password fields. I have started the password-validator.directive as so: Truyền thông Xiêm La Thanks for this article. Very detailed and helpful. I am having some strange issues however. I am trying to create a Password Mismatch validation for Password and Confirm Password fields. I have started the password-validator.directive as so: Igor Geshoski Tôi muốn nói rằng bạn đang thiếu câu lệnh 'return' của phương thức xác thực. Nó được khai báo để trả về một đối tượng thuộc loại 'ValidationErrors', vì vậy đó là lý do tại sao bạn gặp lỗi Igor Geshoski Tôi muốn nói rằng bạn đang thiếu câu lệnh 'return' của phương thức xác thực. Nó được khai báo để trả về một đối tượng thuộc loại 'ValidationErrors', vì vậy đó là lý do tại sao bạn gặp lỗi Arthur Stankevich Này, Igor, cảm ơn bạn vì bài viết này. Tôi nghĩ rằng BirthYearValidatorDirective có thể được cải thiện một chút để không cho phép các số phân số, e. g. 1955. 66. Nhìn chung, đó là một bài đọc rất sâu sắc, hữu ích. Cảm ơn bạn Arthur Stankevich Này, Igor, cảm ơn bạn vì bài viết này. Tôi nghĩ rằng BirthYearValidatorDirective có thể được cải thiện một chút để không cho phép các số phân số, e. g. 1955. 66. Nhìn chung, đó là một bài đọc rất sâu sắc, hữu ích. Cảm ơn bạn Mutasem Barjawi Cảm ơn bạn cho bài viết chi tiết này. Xác thực xuất hiện ngay từ chữ cái đầu tiên người dùng nhập vào. Điều này không cho người dùng cơ hội nhập giá trị đầy đủ trước khi được xác thực. Ví dụ: khi xác thực số điện thoại, khi tôi nhập chữ số đầu tiên, tôi nhận được thông báo lỗi rằng định dạng cần phải là XXX-XXX-XXX. Bạn có biết một cách hay để không hiển thị lỗi cho đến sau này khi tiêu điểm có thể nằm ngoài hộp (hoặc nếu bạn có đề xuất khác về thời điểm tốt hơn bằng mọi cách, vui lòng cho tôi biết). Cảm ơn Barjawi Mutasem Barjawi Cảm ơn bạn cho bài viết chi tiết này. Xác thực xuất hiện ngay từ chữ cái đầu tiên người dùng nhập vào. Điều này không cho người dùng cơ hội nhập giá trị đầy đủ trước khi được xác thực. Ví dụ: khi xác thực số điện thoại, khi tôi nhập chữ số đầu tiên, tôi nhận được thông báo lỗi rằng định dạng cần phải là XXX-XXX-XXX. Bạn có biết một cách hay để không hiển thị lỗi cho đến sau này khi tiêu điểm có thể nằm ngoài hộp (hoặc nếu bạn có đề xuất khác về thời điểm tốt hơn bằng mọi cách, vui lòng cho tôi biết). Cảm ơn Barjawi Alan Biggie Được viết rất tốt, logic thông qua các phương thức biểu mẫu khác nhau mà không che đậy các vấn đề trong thế giới thực. Điều này phải có trong Hướng dẫn góc chính thức. Cảm ơn - bạn đã giúp tôi hôm nay Alan Biggie Được viết rất tốt, logic thông qua các phương thức biểu mẫu khác nhau mà không che đậy các vấn đề trong thế giới thực. Điều này phải có trong Hướng dẫn góc chính thức. Cảm ơn - bạn đã giúp tôi hôm nay Lautaro Lorenz đơn giản là tuyệt vời, rất hữu ích Lautaro Lorenz đơn giản là tuyệt vời, rất hữu ích dejan Cảm ơn bạn cho ví dụ tốt đẹp này. Nó rất sạch sẽ và hữu ích dejan Cảm ơn bạn cho ví dụ tốt đẹp này. Nó rất sạch sẽ và hữu ích Nate Summer-Cook Điều đó thực sự khá dễ dàng. kiểm tra, nếu phần tử đã được chạm vào trước khi hiển thị thông báo. điều khiển. kiểm soát && không hợp lệ. xúc động Nate Summer-Cook Điều đó thực sự khá dễ dàng. kiểm tra, nếu phần tử đã được chạm vào trước khi hiển thị thông báo. điều khiển. kiểm soát && không hợp lệ. xúc động Bob Mazzo Phương thức `markAsDirty()` của biểu mẫu đã thực sự giúp ích cho tôi. Cảm ơn bạn Bob Mazzo Phương thức `markAsDirty()` của biểu mẫu đã thực sự giúp ích cho tôi. Cảm ơn bạn Anushree Kaple Khi tôi đang cố gắng xây dựng, tôi nhận được "Điều khiển 'thuộc tính' không tồn tại trên loại 'AbstractControl'. " Xin vui lòng giúp đỡ Anushree Kaple Khi tôi đang cố gắng xây dựng, tôi nhận được "Điều khiển 'thuộc tính' không tồn tại trên loại 'AbstractControl'. " Xin vui lòng giúp đỡ Vivek Sharma Xin chào Igor, Một điều nhanh chóng. lệnh này bằng cách nào đó không hoạt động đối với các thành phần con được chia sẻ từ các mô-đun khác, có ý tưởng nào về điều đó không ?? Vivek Sharma Xin chào Igor, Một điều nhanh chóng. lệnh này bằng cách nào đó không hoạt động đối với các thành phần con được chia sẻ từ các mô-đun khác, có ý tưởng nào về điều đó không ?? John Hammond You can try out a framework/library called ts.validator.fluent. Generic object validation. Fluent rules. https://github.com/VeritasSoftware/ts.validator Also, an Angular 6 CLI app to demo the framework: https://github.com/VeritasSoftware/ts-validator-app-angular6 The app uses a Service oriented approach to client-side form validation, with the below advantages: -- The business rules around validation are separated from the components. -- The business rules are centralized in the validation service. -- The service is re-usable. -- The service can be injected into any component. -- You can unit test the business rules by unit testing the service. NPM Package: https://www.npmjs.com/package/ts.validator.fluent Here is an example of how your TypeScript models can be validated using the framework: /* Install npm package ts.validator.fluent and then import like below */ import { IValidator, Validator, ValidationResult } from 'ts.validator.fluent/dist'; /*TypeScript model*/ class Person { Name: string; } /* Validation rules */ var validatePersonRules = (validator: IValidator John Hammond You can try out a framework/library called ts.validator.fluent. Generic object validation. Fluent rules. https://github.com/VeritasSoftware/ts.validator Also, an Angular 6 CLI app to demo the framework: https://github.com/VeritasSoftware/ts-validator-app-angular6 The app uses a Service oriented approach to client-side form validation, with the below advantages: -- The business rules around validation are separated from the components. -- The business rules are centralized in the validation service. -- The service is re-usable. -- The service can be injected into any component. -- You can unit test the business rules by unit testing the service. NPM Package: https://www.npmjs.com/package/ts.validator.fluent Here is an example of how your TypeScript models can be validated using the framework: /* Install npm package ts.validator.fluent and then import like below */ import { IValidator, Validator, ValidationResult } from 'ts.validator.fluent/dist'; /*TypeScript model*/ class Person { Name: string; } /* Validation rules */ var validatePersonRules = (validator: IValidator Anuj Sharma Bạn có thể vui lòng cập nhật cái này cho Angular 8 không? . FormErrorsComponent_1. errorMessages[type] không phải là chức năng Anuj Sharma Can you please explain how to handle field errors from the server, if I have the error response like. Richard Cảm ơn vì bài viết này, đó là bài viết hay nhất tôi từng thấy về chủ đề này. Có lẽ bạn nên đặt nó trong một yêu cầu kéo tới tài liệu Angular. ) |