Daterangepicker更改angularjs

Posted

技术标签:

【中文标题】Daterangepicker更改angularjs【英文标题】:Daterangepicker change angularjs 【发布时间】:2017-12-25 20:58:45 【问题描述】:

我有一个日期范围选择器,每次更改值的范围时我都需要添加一个侦听器,因此我将我的 url 中的 startDate 和 endDate 发送到 restapi,然后使用该值对我的数据库进行查询并获取新行。

我的问题在于听众。当我设置新日期时,我需要“onChange”之类的东西。

查看:

<div class="form-group col-md-3 mb0" ng-if="timerange == 'custom'">
                        <div class="row">
                            <label class="col-sm-3 control-label pt7">Custom</label>
                            <div class="col-sm-9">
                                <input type="text" id="customrange" name="customrange" ng-model="parent.customrange" ng-change="applyOptions()" class="form-control" ui-jq="daterangepicker" ui-options="format: 'YYYY/MM/DD',startDate: 'startdate',endDate: 'enddate', maxDate:'enddate'" />                                
                            </div>
                        </div>
                    </div>

控制器:

var rangeSelector = document.getElementsByTagName('select')[1]; //1h 24h 1w custom
if(rangeSelector.value == 'custom')
    var datePicker = document.getElementById("customrange").getAttribute('ui-options');

    var split = datePicker.split(",");  

 var startDate = split[1].split(': ')[1].replace(/["']/g, '');
   var endDate = split[2].split(': ')[1].replace(/["']/g, '');

if (startDate !== undefined) 
    url += '&startDate='+startDate;

if (endDate !== undefined) 
    url += '&endDate='+endDate;

我尝试了 2 个选项,但是当我在其上放置断点时,我无法进入该代码..

$scope.$watch("customrange", function() 
  console.log("I've changed : ");
);

rangeSelector.addEventListener("change", function(e)
    if(rangeSelector.value == "custom")
        e.preventDefault();
        customrange = document.getElementById("customrange");
        customrange.addEventListener("change", function()
             startEndDate = controllerScope.getStartEndTimestamps();
        );
      
, false);

有人可以帮帮我吗?

Image of problem

【问题讨论】:

【参考方案1】:

更新:

问题是您的 $watch 没有检查正确的型号。

你的 $watch 应该被如下调用:

$scope.$watch("parent.customrange", function(newValue, oldValue) 
 console.log("I've changed : ");
);

观察对象“父”:

$scope.$watch("parent", function(newValue, oldValue) 
  console.log("I've changed : ");
, true);

true 设置可选的 objectEquality 检查。

Angular $watch Documentation:

当 objectEquality == true 时,watchExpression 的不等式由 angular.equals 函数确定。为了保存对象的值以供以后比较,使用了 angular.copy 函数。因此,这意味着观看复杂的对象会对内存和性能产生不利影响。

【讨论】:

我试过了,当我选择标签时它会显示 console.log.. 当我选择日期并应用时什么都没有发生.. 它不会记录任何内容 尝试观看“parent.customrange”。由于您现在正在观看对象的字段,因此您可以删除“true”。 已更新为正确答案。请选择作为答案。干杯 抱歉,当我按下应用时它只在页面打开时显示警报没有任何反应...... 再次查看文档:The listener fn is called asynchronously (via $evalAsync) to initialize the watcher. 这意味着将在加载时调用侦听器逻辑。我看不到应用功能,但请确保它正在更改 parent.customrange 模型。因为这就是我们正在观看的内容

以上是关于Daterangepicker更改angularjs的主要内容,如果未能解决你的问题,请参考以下文章

daterangepicker关闭父引导下拉列表

daterangepicker 使用说明+参数详解

从 daterangepicker 禁用或删除 mintues 下拉菜单

关于daterangepicker的配置

daterangepicker日期插件怎么设置当前日期

daterangepicker 使用方法总结