Datepicker 不与控制器反应 - AngularJS

Posted

技术标签:

【中文标题】Datepicker 不与控制器反应 - AngularJS【英文标题】:Datepicker doesn't react with controller - AngularJS 【发布时间】:2017-11-13 04:52:36 【问题描述】:

我使用 2 个日期制作了一个过滤器,并根据发布日期呈现适当的文章。我的日期选择器正在选择日期,但不与控制器做出反应以显示适当的文章。但是当我手动输入日期时它会起作用。

index.html

 <ul class="list-inline">
<li>
    <label>from</label><input type="text" name="S_Date" ng-model="from" id="from-datepicker" class="form-control" />
</li>
<li>
    <label>till</label><input type="text" name="E_Date" ng-model="to" id="from-datepicker2" class="form-control"/>
</li>
</ul>

<article class="white-panel" ng-repeat="x in results | orderBy: '-published_date' | myfilter : from : to">
    <h5><b>x.section</b></h5>
    <h4><a ng-href="x.url" target="_blank">x.title</a></h4>
    <h5>x.byline</h5>
    <p>x.abstract
    <br><br>
    <i>x.published_date | date: 'medium' </i>
    </p>
</article>

controller.js

var app = angular.module('myApp', []);
app.controller('appController', function($scope, $filter) 
    var url = "https://api.nytimes.com/svc/topstories/v2/home.json";
    url += '?' + $.param(
      'api-key': "853fc084776f46e29732e71b3f1269ae"
    );
    $.ajax(
      url: url,
      method: 'GET',
    ).done(function(result) 
      console.log(result);
      $scope.$apply(function()
        $scope.results = result.results;
    );
    ).fail(function(err) 
      throw err;
    );

    $scope.from="2017-05-02";
    $scope.to="2017-06-11";

);

$("#from-datepicker").datepicker( 
    format: 'yyyy-mm-dd'
);


$("#from-datepicker2").datepicker( 
    format: 'yyyy-mm-dd'
);

app.filter("myfilter", function() 
  return function(results, from, to) 
        return results.filter(function(results)
            return results.published_date >= from && results.published_date 
<= to;
        );
  ;
);

【问题讨论】:

这是因为 ng-model 没有在日期选择器更改时得到更新 感谢您的快速回答。你能给我一些建议,我应该如何更新它?? 你在使用 jquery datepicker。使用该日期选择器的 onchange 事件并使用 $scope.$apply(function() 更新模型更改 您也可以为此创建一个指令,例如***.com/a/38410714/4018629 【参考方案1】:

创建一个自动处理模型更新的指令

app.directive('datepicker', [function () 
        return 
            restrict: 'A',
            require: 'ngModel',
            link: function (scope, element, attrs, ngModelCtrl) 
                $(function () 
                    element.datepicker(
                        dateFormat: 'mm/dd/yy',
                        onSelect: function (date) 
                            scope.$apply(function () 
                                ngModelCtrl.$setViewValue(date);
                            );
                        
                    );
                );
            
        
    ]);

<input type="text" datepicker name="S_Date" ng-model="from"  class="form-control" />

【讨论】:

以上是关于Datepicker 不与控制器反应 - AngularJS的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将 react-datepicker 与反应钩子形式一起使用?

反应 |还原形式 |材料-ui |如何将 DatePicker 与我的表单结合使用

mat-datepicker 反应式表单在表单重置时设置默认值

如何在 livewire / alpinejs 应用程序中使 flatpickr datepicker 反应?

如何清除 react-multiple-datepicker 中的值?

单击日期选择器时,单元格编辑器上的 Ag-grid Angular Material Datepicker 失去焦点