Sự khác biệt giữa yêu cầu và ng-bắt buộc là gì?


Câu trả lời:


420

Các phần tử biểu mẫu AngularJS tìm kiếm requiredthuộc tính để thực hiện các chức năng xác nhận. ng-requiredcho phép bạn đặt requiredthuộc tính tùy thuộc vào bài kiểm tra boolean (ví dụ: chỉ yêu cầu trường B - giả sử, số sinh viên - nếu trường A có giá trị nhất định - nếu bạn chọn "sinh viên" làm lựa chọn )

Ví dụ, <input required><input ng-required="true">về cơ bản là giống nhau

Nếu bạn đang tự hỏi tại sao lại theo cách này, (và không chỉ tạo ra <input required="true">hoặc <input required="false">), thì đó là do các hạn chế của HTML - requiredthuộc tính không có giá trị liên quan - sự hiện diện đơn thuần của nó (theo tiêu chuẩn HTML) mà yếu tố được yêu cầu - vì vậy góc cần một cách để đặt / bỏ đặt giá trị bắt buộc ( required="false"sẽ là HTML không hợp lệ)


Làm thế nào tôi có thể loại bỏ ng-yêu cầu tương ứng? Bởi vì tôi đã thử một số phương pháp jquery nhưng không thành công
themhz

28
Tôi không chắc là tôi hiểu câu hỏi .. Trong thực tế, bạn không bao giờ sử dụng ng-required = "true", mà là ng-required = "scopedVariable" hoặc ng-required = "scopeTruthTest ()" và giá trị của biến / hàm xác định nếu phần tử được yêu cầu. Không bao giờ sử dụng jquery để gây rối với những điều này trong một ứng dụng góc cạnh, hoặc bạn sẽ có kết quả không thể đoán trước!
Tiago Roldão

Điều đáng nói là ng-required hiển thị thông báo lỗi kiểu công cụ mặc định với nội dung 'trường này là bắt buộc', không phải lúc nào cũng mong muốn. Tôi đang tìm cách tắt nó đi
Adam Spence

2
Nó không, thực sự. Không chắc chắn, nhưng tôi nghĩ những gì bạn đang đề cập đến là xác thực html5, được tự động tạo trước bởi hầu hết các trình duyệt hiện đại. Nếu bạn muốn kiểm soát điều này (vô hiệu hóa những gì trình duyệt làm), bạn có thể thêm thuộc tính novalidate : <form method="post" action="/foo" novalidate>. Một lần nữa, đây là thuộc tính html5, không liên quan đến angularJS.
Tiago Roldão

Tôi đã dự kiến ​​rằng khi ng-requiredtrỏ đến một biến phạm vi / bộ điều khiển, Angular sẽ theo dõi nó để thay đổi và đặt thuộc tính bắt buộc cho phù hợp. Mặc dù trong trường hợp requiredthuộc tính HTML đơn giản, bạn không có loại linh hoạt đó. Không? Và trong khi chúng ta cùng chủ đề, thì ng-attr-requiredsao? Có chính xác như ng-requiredvậy không?
AsoodAsItGets

78

Tôi muốn tạo một addon cho câu trả lời của tiago :

Giả sử bạn đang ẩn phần tử bằng cách sử dụng ng-showvà thêm một requiredthuộc tính trên cùng:

<div ng-show="false">
    <input required name="something" ng-model="name"/>
</div>

sẽ đưa ra một lỗi như:

Điều khiển biểu mẫu không hợp lệ với name = '' không thể tập trung

Điều này là do bạn không thể áp đặt requiredxác nhận cho hiddencác yếu tố. Việc sử dụng ng-requiredlàm cho nó dễ dàng hơn để áp dụng có điều kiện xác nhận yêu cầu, điều này thật tuyệt vời !!


13
Chắc chắn là một mẹo hay, và bạn cũng có thể sử dụng ng-ifthay vì ng-show/ ng-hideđể vượt qua vấn đề tiềm năng đó.
jkjustjos Breath

1
Đây phải là câu trả lời được chấp nhận. Nếu bạn có các yếu tố ẩn (ng-show = "false"), có một sự khác biệt giữa ng-required = "true" và chỉ 'bắt buộc' như được mô tả trong câu trả lời này và chúng tôi đã vào nước nóng vì sự khác biệt này.
Ivan Krivyakov

17

Các thuộc tính HTML required="required" là một tuyên bố cho trình duyệt biết lĩnh vực này là cần thiết để cho các hình thức có giá trị. ( required="required"là biểu mẫu XHTML, chỉ cần sử dụng requiredlà tương đương)

Các thuộc tính góc ng-required="yourCondition" 'isRequired (yourCondition)' phương tiện và thiết lập các thuộc tính HTML động cho bạn tùy thuộc vào tình trạng của bạn.

Cũng lưu ý rằng phiên bản HTML khó hiểu , không thể viết một cái gì đó có điều kiện như required="true"hoặc required="false", chỉ có sự hiện diện của các vấn đề thuộc tính (hiện tại có nghĩa là đúng)! Đây là nơi Angular giúp bạn ra ngoài ng-required.


Đáng buồn thay, trình duyệt không cho phép đặt đúng / sai, có thể được coi là quá kỹ thuật ...
Barshe Roussy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.