【问题标题】:AngularJS: ng-if checking model value, but model value of input set only if input is $validAngularJS:ng-if 检查模型值,但仅当输入为 $valid 时才设置输入的模型值
【发布时间】:2013-09-16 14:05:26
【问题描述】:

这是我想做的:

  • 我有一个包含两个输入的表单,一个是“电子邮件”类型,另一个是“密码”类型。
  • $scope 中有一个名为 form 的对象
  • 两个输入都有 ng-model 指令 (ng-model="form.input_name")
  • 我想让一个图标出现在输入旁边,只有在输入中输入了某些内容时
  • 该图标附加了一个清除输入的操作(使用 angularjs 锤子的指令“ng-tap”)。
  • 要检查输入是否设置并显示图标,我使用 ng-if="form.input_name.length>0"。
  • 问题是,输入的模型值仅在输入为 $valid 时才设置,因此对于我的电子邮件输入,该图标仅在输入中键入的内容具有有效的电子邮件格式 (a@a.com) 时才会出现.

有没有办法检查 ng-if 上输入的视图值,或者有没有更好的解决方案让图标出现?

这是我正在使用的代码(省略了 css 类):

-HTML:

<form name="form-login">
  <input placeholder="email" type="email" ng-model="form.email" required>
  <i hm-tap="clearContent('email')",ng-if="form.email.length>0">

  <input placeholder="password" type="email" ng-model="form.passwd" required>
  <i hm-tap="clearContent('passwd')",ng-if="form.passwd.length>0">
</form>   

-清除coffeescript中的输入的功能

$scope.clearContent = (fieldName) ->
      switch fieldName
        when 'passwd' then $scope.form.passwd = ""
        when 'email' then $scope.form.email = "" 

这适用于密码输入(因为它没有验证)。 感谢阅读。

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    浏览器验证将保持输入的内部值为空,直到它通过验证。在这种情况下,电子邮件验证。这意味着用户看到的和JS看到的不一样!

    您可以检查表单输入的$viewValue 并显示它的长度是否 > 0。您必须命名您的表单(您已经拥有)和每个输入(我添加的)。您也可以通过FORMNAME.INPUTNAME.$viewValue 访问每个值。

    <form name="formLogin">
        <input placeholder="email" type="email" name="email" ng-model="form.email" required /> <i hm-tap="form.email = ''" ng-if="formLogin.email.$viewValue.length>0">!</i>
        <input placeholder="password" type="password" name="passwd" ng-model="form.passwd" required /> <i hm-tap="form.passwd = ''" ng-if="formLogin.passwd.$viewValue.length>0">!</i>
    </form>
    

    示例:http://jsfiddle.net/TheSharpieOne/6M5JX/1/

    另外,您可以通过直接在hm-tap 中设置字段[为空字符串] 来避免clearContent 函数

    【讨论】:

    • 谢谢,成功了!不过需要注意的一点是,如果我使用 'form-login' 而不是 'formLogin' 作为表单名称,则 ng-if 指令由于某种原因不起作用。我不知道它需要命名约定。很抱歉没有对您的帖子投票 +1 顺便说一句。我刚刚创建了我的帐户,所以我没有足够的声望来投票。
    • 变量名中不允许使用连字符/破折号,但在可以将键作为字符串传递的键中允许使用连字符/破折号。表单名称本质上是 $scope 对象中的一个键,因此它是允许的,但是在模板中使用 Angular 解析它是另一个问题,它认为它是从 form 中减去 login
    • 啊,我没有想到使用 $viewValue。很好。收回我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多