当JavaScript更新输入值时,AngularJS过滤不起作用

时间:2016-09-24 12:47:54

标签: javascript angularjs updates

我试图用几天的时间用Angular做一些事情而且我遇到了更新问题。

这是我的HTML页面的一部分:

<div ng-app="monApp" ng-controller="monControleur">
Date de début : <input type="text" ng-model="date_deb" placeholder="JJ/MM/AAAA" value="" name="date_d" id="champ_date_deb" size="12" maxlength="10">&nbsp;<span id="calendarMainDeb"></span>
<script type="text/javascript">
//<![CDATA[
    calInit("calendarMainDeb", "Calendrier Deb", "champ_date_deb", "jsCalendar", "day", "selectedDay","calendarWrap1");
//]]>
</script>
<table border='1'>
<tr data-ng-repeat="evenement in mydata | entre_deux_dates:date_deb:date_fin ">
....

当我使用键盘输入新的date_deb时,显示的值将使用Angular进行过滤。相反,如果使用JS日历来设置date_deb值,它会设置值,但不会实现过滤,除非在JS中提供焦点并按“空格”。

以下是更新日期值的JS的最后一部分:

field.value = dateArr[0]+'/'+dateArr[1]+'/'+dateArr[2];
field.focus();

如何在日历中选择日期后立即动态更新已过滤的值?我不希望用户在每次选择后按“空格”...

我在角度(ng-model-options等)和JS中尝试过很多解决方案,但没有一个有效。

2 个答案:

答案 0 :(得分:0)

您需要调用摘要周期:

 $scope.$applyAsync(function() {
         field.value = dateArr[0]+'/'+dateArr[1]+'/'+dateArr[2]; 
         field.focus();
});

这是因为角度通过脏检查 - 在每个摘要周期中运行(应用意味着运行根范围的摘要),范围层次结构中的所有观察者都会检查更改,并根据需要进行更新。

答案 1 :(得分:0)

你可以把你的答案放在$ timeout中,因为$ timeout会运行摘要周期,并且会从错误“$ apply alreay running”中保存。

$timeout(function() {
     field.value = dateArr[0]+'/'+dateArr[1]+'/'+dateArr[2]; 
  });