2014-10-01 1 views
11

저는 각도 (1.2)와 Laravel (4.2)에서 간단한 crud 어플리케이션이 있습니다. 요청 페이로드에서 모든 필드를합니다,하지만 난 빈 필드로 업데이트 모델을 할 필요가있을 때이 문제입니다빈 ng-model 필드에 앵귤러 세트가 정의되지 않은 이유

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

: 간단한 CRUD 작업에 나는 효율적인 웅변 방법을 사용합니다.

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

컨트롤러 :

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

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

및 HTML :

<input type="text" data-ng-model="formData.name" name="name" class="form-control" id="name" 
          placeholder="Nazwa" data-server-error required> 
내 서비스의 $ 자원 get 메소드의 응답으로 가득 양식을 가지고있는 편집 작업에서

이 필드 값을 지우고 $ scope.formData의 값을 제출하면 undefined로 설정되고 n ot는 PUT 요청에 포함되어 있으므로 laravel 모델 채우기 메서드는 필드를 볼 수 없으며 유효성 검사를 위해 빈 값을 설정하지 않지만 모델의 원래 값을 사용합니다.

문제는 : 정의되지 않은 대신 ngModel에서 빈 문자열을 보내려면 어떻게해야합니까?

p.s. 입력 유형이 텍스트 영역 인 경우 $ 리소스가 빈 문자열을 보냅니다. - /, 혼란 스럽습니다 ...

답변

14

입력에 "필수"지시문이 있으면 빈 값이 설정되지 않습니다 (그래서 그것은 정의되지 않을 것이다). 이럴 조금 이상한 사용 사례가

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

을 :

값이 입력이 비어 모델에 저장하는 검색되지된다 (파일 input.js에서 "requiredDirective")의 소스 코드를 참조하십시오 어쨌든 : 클라이언트 측 유효성 검사를 원하지만 잘못된 값을 서버에 제출하고 싶지 않습니까?

나는 자신의 유효성 검사 ("my-required")를 작성하여이 작업을 수행 할 수 있다고 생각합니다. 또한

당신이 lodash와 예를 들어, 서버에 데이터를 게시하기 전에 디폴트 값을 복사 (또는 밑줄) 수 :

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

+0

내가 입력 원인 각도 양식 유효성 검사에 필요한 속성이 필요 ...그리고 네, 폼 태그에 novalidate가 도움이되지 않습니다. –

+0

불행히도 그것은 "필수적"인 방법이 아닙니다. 내 편집 된 답변보기 –

13

값이 allowInvalidngModelOptions 인 값으로 유효하지 않은 경우에도 모델을 설정하도록 각도를 구성 할 수 있습니다.

allowInvalid : 모델을 undefined로 설정하는 기본 동작 대신 올바르게 유효성을 검사하지 않은 값으로 모델을 설정할 수 있음을 나타내는 부울 값입니다.

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

예 :

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

완벽 - 내 유효성 검사가 실패 할 때마다 왜 내 모델이 '정의되지 않음'으로 설정되는지 궁금합니다. 이로 인해 문제가 해결되었습니다. 감사! –