验证器中的函数,而不是控制器给我一个未定义的“lowerCase()”
Posted
技术标签:
【中文标题】验证器中的函数,而不是控制器给我一个未定义的“lowerCase()”【英文标题】:Function in validator, not controller giving me an undefined at 'lowerCase()' 【发布时间】:2016-12-14 10:45:10 【问题描述】:我有一个表单,我试图确保不区分大小写不是电子邮件验证的问题。我有一个名为mustMatch
的角度验证,它可以按照它的说明进行操作,它确保电子邮件与索引匹配。但是,我还需要确保这种情况不是问题。所以我最终创建了一个名为matchCaseInsensitivity
的辅助函数,最终这就是我遇到问题的地方,因为我认为解决这个问题的最佳方法是添加tolowerCase()
过滤器。当我这样做时,我能够绕过我的 angular mustMatch 错误消息(这很好),但是当我在表单上提交时,我会在 'tolowerCase()' is undefined
中遇到一个 javascript 问题。
我认为我收到此错误的原因是因为我将这些内置在验证器文件中,而不是控制器中。 (不知道是不是这样)
我的前端看起来像这样。请注意 'match-case-insensitive' => true
作为我的解决方案构建
%input-md type: "email", "ng-model" => "vm.form.email_confirmation", required: true, 'must-match' => 'register_form["vm-form-email"]', 'match-case-insensitive' => true, 'ng-hide' => 'vm.form.validated_email', autocapitalize: 'off'
Confirm email address
我的 mustMatch 验证错误消息是
if attr.mustMatch then addValidation 'mustMatch', 'This field must match the previous value.'
触发 mustMatch 错误消息的实际函数,我也将它与我在前端引用的 'match-case-insensitive'
捆绑在一起。这也在验证文件中,而不是控制器中。 (因为那值多少钱……我不知道)。 (请注意,它在 coffeeScript 中)
getMatchValue = ->
match = matchGetter($scope)
if (angular.isObject(match) and match.hasOwnProperty('$viewValue'))
match = match.$viewValue
match
$scope.$watch getMatchValue, ->
ctrl.$$parseAndValidate()
return
ctrl.$validators.mustMatch = ->
match = getMatchValue()
if $attrs.matchCaseInsensitive
ctrl.$viewValue.toLowerCase() is match.toLowerCase()
else
ctrl.$viewValue is match
return
我继续收到这个TypeError: Cannot read property 'toLowerCase' of undefined at r.$validators.mustMatch
。我已经坚持了2天多了,真的不知道如何解决它。如果有人能看看他们能做什么,我将不胜感激。
【问题讨论】:
【参考方案1】:从错误中,很明显ctrl.$viewValue
或match
(或两者)都是undefined
。不确定在这种情况下您希望预期的行为是什么,但这是一种可行的方法(我将用 JavaScript 编写):
match = getMatchValue()
if (!(match && ctrl.$viewValue))
return false
if ($attrs.matchCaseInsensitive)
return ctrl.$viewValue.toLowerCase() === match.toLowerCase()
return ctrl.$viewValue === match
【讨论】:
以上是关于验证器中的函数,而不是控制器给我一个未定义的“lowerCase()”的主要内容,如果未能解决你的问题,请参考以下文章