【发布时间】:2016-08-31 07:29:35
【问题描述】:
使用基本输入日期:
<form name="form">
<input type="date" name="startDate" my-directive.........
我想通过使用$setViewValue 在输入中注入值来对相应的myDirective 进行单元测试。
基本上我决定使用$parsers.push 来检索日期对象(因为在解析器链的末尾):
link: function ($scope, element, attr, ctrl) {
ctrl.$parsers.push(function (viewValue) {
alert(viewValue);
//.....
单元测试调用是这样的:
$scope.form.startDate.$setViewValue(new Date(2014,8,14));
我在警报中收到undefined。
如果我这样打电话:
$scope.form.startDate.$setViewValue('2014-08-14');
我获得Thu Jan 01 1970 而不是Thu Aug 14 2014。
有人经历过吗?如果是,如何解决?
【问题讨论】:
-
ngModelController有两种方式:从模型到视图,从视图到模型。当值从视图传递到模型时,使用 $parsers,当从模型传递到视图时 - $formatters。当您在逻辑上调用
$setViewModel时 - 视图方向,因此将被称为 $formatters 而不是 $parsers -
恰恰相反;) 解析器正在获取视图模型值,并且必须映射到模型值。所以要模拟 viewModel 的变化,我们必须通过 $setViewValue 来设置它。 (而不是 $setViewModel)
-
可以加plunkr吗? :-) 所以我们可以检查一下。我也明白了,我把
setViewModel和setViewValue混淆了:-) -
对我来说很好。你能创建一个重现你的问题的 plunkr 吗?
-
我创建了这个 plunkr 但在这里也可以正常工作...plnkr.co/edit/BueAIByuXYozWjMy3fzB?p=preview我正在搜索我的代码问题。
标签: javascript html angularjs angularjs-directive