AngularJS - 错误的输入验证状态

时间:2014-08-22 09:49:52

标签: angularjs validation

我有一个输入并在ng-change我在函数中传递Form.input所以我可以根据输入状态(错误,有效/无效......)做一些事情。但这是奇怪的事情: 当我记录我传递的输入时,我在控制台输出中看到input.$valid = false这是正确的值。但是当我记录input.$valid本身时,我知道这是真的,这是假的!为什么会这样?当我尝试解析input.$valid时,我得到了错误的值,我无法根据它进行计算。

这是输入:

<input ng-model="..."
       type="radio"
       name="input"
       ng-value={{v}}
       ng-disabled="field.readonly"
       ng-required="field.required"
       ng-init="test(Form.input)"
       ng-change="test(Form.input)">

这是测试功能:

$scope.test = function (object) {
    console.log(object);
    console.log(object.$valid);
    console.log(JSON.stringify(object));
};

这是日志输出:

// console.log(object);
c {$viewValue: NaN, $modelValue: NaN, $parsers: Array[1], $formatters: Array[1], $viewChangeListeners: Array[1]…}
$dirty: false
$error: Object
$formatters: Array[1]
$invalid: true
$isEmpty: function (a){return F(a)||""===a||null===a||a!==a}
$modelValue: undefined
$name: "input"
$parsers: Array[1]
$pristine: true
$render: function (){c[0].checked=d.value==e.$viewValue}
$setPristine: function (){this.$dirty=!1;this.$pristine=!0;g.removeClass(e,yb);g.addClass(e,Pa)}
$setValidity: function (a,c){p[a]!==!c&&(c?(p[a]&&n--,n||(k(!0),this.$valid=!0,this.$invalid=!1)):(k(!1),this.$invalid=!0,this.$valid=!1,n++),p[a]=!c,k(c,a),l.$setValidity(a,c,this))}
$setViewValue: function (d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,g.removeClass(e,Pa),g.addClass(e,yb),l.$setDirty());r(this.$parsers,function(a){d=a(d)});this.$modelValue!==
$valid: false
$viewChangeListeners: Array[1]
$viewValue: undefined
__proto__: Object


// console.log(object);
true 


// console.log(JSON.stringify(object));
{"$viewValue":null,"$modelValue":null,"$parsers":[null],"$formatters":[null],"$viewChangeListeners":[null],"$pristine":true,"$dirty":false,"$valid":true,"$invalid":false,"$name":"input","$error":{}} 

更新:我想我可能找到了一些东西。当我这样做时:

<input ...
       ng-init="{{test(Form.input)}}"
       ng-change="{{test(Form.input)}}">

而不是

<input ...
       ng-init="test(Form.input)"
       ng-change="test(Form.input)">

我得到了正确的结果,但我在控制台中也出错:

Error: $parse:syntax
Syntax Error: Token 'test' is at column {2} of the expression [{3}] starting at [{4}].

1 个答案:

答案 0 :(得分:3)

我相信您的代码没有任何问题,它只是您阅读控制台输出的方式。

通过console.log(object),你是&#34;打印&#34;对象的JavaScript表示形式。就像你直接看对象的参考一样。这意味着如果之后更改了对象,您也会看到这些更改。把它想象成对象的实时表示。

在其他日志(console.log(object.$valid);console.log(JSON.stringify(object));)上,由于您只是打印字符串/布尔值而没有对象表示,因此不会发生。

如果您想查看真实对象的内容,请坚持:

console.log(JSON.stringify(object));