2014-10-01 13 views
11

Tôi có ứng dụng crud đơn giản trong Angular (1.2) và Laravel (4.2). Để hoạt động crud đơn giản, tôi sử dụng phương pháp Eloquent hiệu quả:Tại sao góc đặt không xác định thành các trường ng-model rỗng

$product->fill(Input::all()); 

có tất cả các trường từ tải trọng yêu cầu, nhưng có vấn đề khi tôi cần cập nhật mô hình với các trường trống.

Trong chỉnh sửa hành động Tôi có một hình thức mà được làm đầy với phản ứng của $ nguồn method get của dịch vụ của tôi:

adminModule.factory 'Product', ($resource) -> 
    $resource '/admin/products/:id', { id: '@id' }, { 
    query: { method: 'GET', isArray: false } 
    update: { method: 'PUT' } 
    } 

một bộ điều khiển:

adminModule.controller 'ProductFormEditController', ($scope, Product, $stateParams) -> 

    $scope.formData = Product.get({id: $stateParams.id}) 

và html:

<input type="text" data-ng-model="formData.name" name="name" class="form-control" id="name" 
          placeholder="Nazwa" data-server-error required> 

Nếu tôi xóa giá trị trường này và gửi giá trị của $ scope.formData được đặt thành không xác định và có n ot được bao gồm trong yêu cầu PUT, do đó phương thức điền vào mô hình laravel không thấy trường nào và không đặt giá trị trống cho xác thực, nhưng lấy giá trị ban đầu của mô hình.

Vấn đề là: Làm thế nào tôi có thể gửi chuỗi rỗng từ ngModel thay vì không xác định?

p.s. Nếu kiểu đầu vào là textarea thì chuỗi $ resource gửi rỗng: - /, vì vậy tôi đang nhầm lẫn ...

Trả lời

14

Khi bạn có chỉ thị "bắt buộc" trên đầu vào, giá trị trống sẽ không bao giờ được đặt (vì vậy nó sẽ không được xác định).

Xem mã nguồn ("requiredDirective" trong input.js tập tin), nơi không có giá trị được lấy để lưu trữ trong các mô hình, khi đầu vào là trống:

if (attr.required && ctrl.$isEmpty(value)) { 
    ctrl.$setValidity('required', false); 
     return; 
    } else { 
     ctrl.$setValidity('required', true); 
     return value; 
} 

IMHO nó là một chút trường hợp sử dụng lạ anyway: Bạn muốn xác thực phía khách hàng, nhưng vẫn muốn gửi các giá trị không hợp lệ đến máy chủ, phải không?

Tôi đoán bạn có thể viết xác nhận của riêng bạn ("yêu cầu của tôi") để làm điều đó.

Hoặc bạn có thể sao chép các giá trị mặc định trước khi gửi dữ liệu đến máy chủ, ví dụ với lodash (hoặc nhấn):

_.defaults (formData, {name: ""});

+0

tôi cần phải thuộc tính cần thiết cho việc đầu vào nguyên nhân hình thức Góc xác nhận ...Và có, tôi đã xác nhận trên thẻ biểu mẫu nó không giúp đỡ –

+0

Thật không may đó chỉ là không phải là cách "yêu cầu" hoạt động trong góc. Xem câu trả lời đã chỉnh sửa của tôi. –

13

Bạn có thể định cấu hình góc để đặt mô hình ngay cả khi giá trị không hợp lệ với thuộc tính allowInvalid từ ngModelOptions.

allowInvalid: giá trị boolean cho biết rằng mô hình có thể được đặt bằng giá trị không xác thực chính xác thay vì hành vi mặc định của mô hình thành không xác định.

API Reference: https://docs.angularjs.org/api/ng/directive/ngModelOptions

Ví dụ:

<input 
    type="text" 
    ng-model="myvalue" 
    ng-model-options="{ allowInvalid: true }"/> 
+0

Sự hoàn hảo - Tôi đã tự hỏi tại sao mô hình của tôi đã được đặt thành 'undefined', bất cứ khi nào xác thực của tôi không thành công! Điều này đã khắc phục được sự cố. Cảm ơn! –

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