我有一个输入并在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}].
答案 0 :(得分:3)
我相信您的代码没有任何问题,它只是您阅读控制台输出的方式。
通过console.log(object)
,你是&#34;打印&#34;对象的JavaScript表示形式。就像你直接看对象的参考一样。这意味着如果之后更改了对象,您也会看到这些更改。把它想象成对象的实时表示。
在其他日志(console.log(object.$valid);
和console.log(JSON.stringify(object));
)上,由于您只是打印字符串/布尔值而没有对象表示,因此不会发生。
如果您想查看真实对象的内容,请坚持:
console.log(JSON.stringify(object));