2

我正在尝试在我的 Rails 项目中使用 Angularjs 进行客户端表单验证。我正在使用内置的 ng-show 指令来显示表单字段的错误。代码非常简单:

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), 
                              html: { novalidate: true, name: 'signUpForm'}) do |f| %>
  ...

  <%= f.email_field :email, :'ng-model'=>'user.email', name: 'uEmail', 
                              autofocus: true, required: true %>
  ...

  <div ng-show="signUpForm.uEmail.$dirty && signUpForm.uEmail.$invalid">
    <span ng-show="signUpForm.uEmail.$error.required">
      <small class="error">Tell us your email.</small>
    </span>
    <span ng-show="signUpForm.uEmail.$error.email">
      <small class="error">This is not a valid email.</small>
    </span>
  </div>
<% end %>

这给了我一个很好的客户端验证,但问题是,因为 Rails 默认情况下会给出一个表单字段名称,就像model[attr]我的情况一样user[email]

但是,在这里,我在提交表单后在 post 请求中给我的电子邮件字段一个名称uEmail和参数,这将是uEmail: 'xxx@xx.xx'rails 无法理解的(默认情况下,Rails 期待类似的东西user: { email: 'xxx@xx.xx' ... }

我试图删除name: 'uEmail'并回退到 Rails 默认并在指令user[email]中使用类似的东西ng-show

<span ng-show="signUpForm.user[email].$error.required">

但这不起作用,有人知道如何解决这个问题吗?

btw: rails -v 4.0 Angularjs version: 1.0.7

4

1 回答 1

3

我不知道你是否找到了解决这个问题的方法,我遇到了同样的问题,我发现 GitHub 上已经打开了一个问题:

https://github.com/angular/angular.js/issues/1201

解决方案非常简单,在您的情况下,您只需执行以下操作:

<span ng-show="signUpForm['user[email]'].$error.required">
于 2013-09-19T13:24:56.193 回答