Angularjs 为什么角度集未定义为空ng模型字段

Angularjs 为什么角度集未定义为空ng模型字段,angularjs,laravel,angular-resource,Angularjs,Laravel,Angular Resource,我在Angular(1.2)和Laravel(4.2)中有简单的积垢应用。对于简单的积垢操作,我使用了有效的雄辩方法: $product->fill(Input::all()); 它从请求有效负载中获取所有字段,但当我需要使用空字段更新模型时是否存在问题 在编辑操作中,我有一个表单,其中填写了我的服务$resource get method的响应: adminModule.factory 'Product', ($resource) -> $resource '/admin/p

我在Angular(1.2)和Laravel(4.2)中有简单的积垢应用。对于简单的积垢操作,我使用了有效的雄辩方法:

$product->fill(Input::all());
它从请求有效负载中获取所有字段,但当我需要使用空字段更新模型时是否存在问题

在编辑操作中,我有一个表单,其中填写了我的服务$resource get method的响应:

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且PUT请求中未包含该值,则Laravel model fill方法无论如何都不会看到该字段,也不会为验证设置空值,而是获取模型的原始值

问题是:如何从ngModel发送空字符串而不是未定义的

p、 如果输入类型是Textarea$resource send empty“”字符串:-/,因此我很困惑…

当您在输入上有“required”指令时,将永远不会设置空值(因此它将未定义)

请参阅源代码(“input.js文件中的requiredDirective”),当输入为空时,没有检索到要存储在模型中的值:

if (attr.required && ctrl.$isEmpty(value)) {
   ctrl.$setValidity('required', false);
      return;
   } else {
      ctrl.$setValidity('required', true);
      return value;
}
无论如何,这是一个有点奇怪的用例:您确实希望客户端验证,但仍然希望向服务器提交无效值,对吗

我想您可以编写自己的验证(“我的要求”)来实现这一点

或者,您可以在将数据发布到服务器之前复制默认值,例如使用lodash(或下划线):


_.defaults(formData,{name:})

您可以配置angular来设置您的模型,即使属性
allowInvalid
来自
ngModelOptions
的值无效

allowInvalid
:布尔值,表示可以使用未正确验证的值来设置模型,而不是将模型设置为未定义的默认行为

例如:

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


我需要输入所需的属性以进行角度表单验证。。。是的,我在表单标签上有novalidate,它没有帮助。不幸的是,这不是angular中“required”的工作方式。查看我编辑的答案。完美-我想知道为什么每次验证失败时,我的模型都被设置为
未定义
!这解决了问题。谢谢不适合我