簡體   English   中英

當JavaScript更新輸入值時,AngularJS過濾不起作用

[英]When JavaScript updates an input value, AngularJS filtering doesn't work

幾天以來,我一直在嘗試使用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中嘗試了很多解決方案,但都沒有用。

您需要調用摘要循環:

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

這是因為角度檢查是通過臟檢查來進行的-在每個摘要周期中(應用意味着對根范圍進行摘要),將檢查范圍層次結構中的所有觀察程序的更改,並根據需要進行更新。

您可以將答案放入$ timeout中,因為$ timeout會運行摘要循環,並且可以避免錯誤“ $ apply alreay running”。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM