2012-08-28 35 views
13

Xác thực hợp lệ mặc định cho biểu mẫu tôi có hoạt động như mong đợi. Nhưng khi người dùng nhập địa chỉ email hợp lệ và mật khẩu tối thiểu ba ký tự, điều đó không có nghĩa là thông tin đăng nhập hợp lệ.Biểu mẫu xác thực phía máy chủ Angular.js

Vì vậy, câu hỏi của tôi là làm thế nào tôi có thể thiết lập các mô hình 'email' và 'mật khẩu' để không hợp lệ sau server-side validation, vì vậy đầu vào-lĩnh vực được lớp ng-không hợp lệ thay vì ng- có hiệu lực.

mã hiện tại của tôi:

function IndexCtrl($scope, $http) 
{ 
    $scope.form = {}; 
    $scope.submitLogin = function() 
    { 
    $http.post('/api/auth/login', $scope.form).success(function(data) 
    { 
     if (!data.success) 
     { 
     $scope.form.errors = [ data ]; 

     // here I also want to mark the models 'email' and 'password' as invalid, so they both get the class 'ng-invalid' 
     } 
     else 
     { 
     $location.path('/'); 
     } 
    }); 
    }; 
} 

Bất kỳ trợ giúp được hoan nghênh và thực sự đánh giá cao. Cảm ơn trước!

+4

Bạn có thể chỉ cần sử dụng $ setValidity phương pháp? – Tosh

+2

Hoàn toàn không liên quan, nhưng tôi đặt mã trạng thái là 400 khi cuộc gọi AJAX của tôi trả lại lỗi. Bằng cách này bạn không cần phải kiểm tra hoặc thiết lập 'data.success' mà thay vào đó chỉ xử lý các lỗi trong callback error. – DanH

Trả lời

5

Tosh shimayama đưa ra câu trả lời đúng. $ setValidity là phương thức từ NgModelController và có hai tham số: validationErrorKeyisValid.

Thông tin thêm về $ setValidity

Thay đổi tình trạng hiệu lực, và thông báo cho các hình thức khi sự kiểm soát thay đổi có hiệu lực. (nghĩa là nó không thông báo cho biểu mẫu nếu người xác thực đã cho là đã được đánh dấu là không hợp lệ).

Nguồn và biết thêm thông tin AngularJS: NgModelController

3

Xác thực phía máy khách nhanh chóng, nhưng rất dễ phá vỡ, ví dụ như - firebug. Bạn chỉ có thể gắn với xác thực phía máy chủ. Xác thực mọi thứ trên máy chủ và trả về BODY với danh sách các phím và thông báo lỗi. Góc cho phép bạn gửi dữ liệu đến máy chủ không đồng bộ, người dùng cuối sẽ thấy nó dưới dạng xác thực phía máy khách, vì không có hậu tố nhìn thấy được.

Xem ví dụ này, hãy thử nhấp vào 'Lưu', và xem các thông báo lỗi: upida.cloudapp.net:8080/org.upida.example.angular/order/create?clientId=1

Bạn có thể tải nó: upida.codeplex.com

Các vấn đề liên quan