2014-10-01 114 views
11

我在Angular(1.2)和Laravel(4.2)中有簡單的Crud應用程序。爲了簡單的CRUD操作我用有效的方法口才:爲什麼angular set將undefined設置爲空ng模型字段

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

這需要從請求負載的所有領域,但有一個問題,當我需要做更新模型與空字段。

在編輯動作我有充滿了我的服務的$資源get方法的反應形式:

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> 

如果我清除此字段值並提交$ scope.formData的值設置爲undefined並且有n不包括在PUT請求中,因此laravel模型填充方法不會看到該字段,也不會爲驗證設置空值,而是取模型的原始值。

問題是:如何從ngModel發送空字符串而不是未定義?

p.s.如果輸入類型是textarea,$ resource發送空的字符串: - /,所以我很困惑...

回答

14

當您對輸入有「必需」指令時,將永遠不會設置空值所以它將是未定義的)。

參見(在文件input.js「requiredDirective」)的源代碼在沒有值被檢索在模型中,當輸入是空白存儲:

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

IMHO它是有點奇怪用例無論如何:你確實想要客戶端驗證,但仍然要提交無效的值到服務器,對不對?

我想你可以寫你自己的驗證(「我需要」)來做到這一點。

另外,您可以將數據發送到服務器,例如用lodash之前在默認值複製(或下劃線):

_.defaults(FORMDATA,{名稱: 「」});

+0

我需要爲輸入原因角形式的驗證所需要的屬性...是的,我沒有對窗體標籤進行驗證,它沒有幫助 – 2014-10-02 17:48:28

+0

不幸的是,這只是「角色」中不需要的方法。看到我編輯的答案。 – 2014-10-06 11:53:37

13

即使該值與從ngModelOptions開始的屬性allowInvalid無效,也可以配置角度來設置模型。

allowInvalid:表示模型可以使用未正確驗證的值進行設置,而不是將模型設置爲未定義的默認行爲。

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

實施例:

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

完美 - 我想知道爲什麼我的模型被設置爲'undefined',每當我的驗證失敗!這解決了這個問題。謝謝! – 2017-12-27 01:30:22

相關問題