【问题标题】:Angular UI datepicker not updatingAngular UI 日期选择器未更新
【发布时间】:2014-07-27 11:08:44
【问题描述】:

我尝试使用前一天和第二天按钮扩展 UI 日期选择器。

正如您从 plunker 中看到的那样,我可以使用 datepicker 或 prev/next 按钮更改模型。但是当使用上一个/下一个按钮更改模型时,日期选择器不会更新。

http://plnkr.co/edit/k1flklFny5BoX6zdwyWJ?p=preview

<div class="form-group">
   <div class="input-group">
     <input type="text" class="form-control" 
        datepicker-popup="{{ctrl.format}}" ng-model="ctrl.dt" 
        is-open="ctrl.opened" datepicker-options="ctrl.dateOptions" 
        ng-required="true" close-text="Close" /> 
    <span class="input-group-btn">
        <button type="button" class="btn btn-default" ng-click="ctrl.open($event)">
            <i class="glyphicon glyphicon-calendar"></i>
        </button>
    </span>
  </div>
</div>

我已经尝试了几种方法(包括 $scope 和演示的控制器作为语法),但它根本不起作用。有什么想法吗?

PS:我非常努力地将上一个按钮、日期选择器、下一个按钮放在一行中,居中,日期选择器占据了它需要的足够空间。如果有人知道如何实现这一点,非常感谢任何帮助。

【问题讨论】:

    标签: angularjs datepicker angular-ui-bootstrap


    【解决方案1】:

    我不知道为什么,但似乎 ngModel 在 Date 对象改变自身时没有反应。但是,如果您将 Date 的新实例分配给范围属性,它就会改变。

    试试这个:

    this.prevDay = function() {
        this.dt = getPrevNextDate(this.dt, -1);
    };
    
    this.nextDay = function() {
        this.dt = getPrevNextDate(this.dt, 1);
    };
    
    function getPrevNextDate(date, increment)
    {
      var newDate = new Date();
      newDate.setDate(date.getDate() + increment);
      return newDate;
    }
    

    最好将this 缓存到控制器函数顶部的var self = this 等变量中,并使用self 变量而不是this

    这样你就可以避免这一行的错误:

    $log.log('GET api/v1/person/' + this.person.id + '/entry returned: ' + data.length + ' entries')
    

    【讨论】:

    • 我没有得到 this 和 self 的最后一部分。为什么我需要 var self = this?
    • 只需将此行添加到个人请求中 success 处理程序:console.dir(this) 并且您会看到自己
    • 啊,我明白了.. 成功处理程序内部是一个回调,所以我不再在我的 Ctrl 类中,这指向其他地方。谢谢
    • 对于答案本身。有用。非常感谢!!你不知道我已经花了多少小时摸索这个。上周我有一个类似的问题,在那里我通过重新分配一个属性以指向一个新对象而不是更改现有对象(与此处完全相反)来更改我的模型:stackoverflow.com/questions/24711933/… .... 这太糟糕了!还是我太笨了???
    • 嗨。我刚刚尝试了你的 datepicker 解决方案,但它似乎只在一个月内运行良好,因为当我去上个月或下个月时,它会跳回第一个月。例如,如果我点击 prev - 6 月 1 日、5 月 31 日、6 月 30 日……您有什么想法可以解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多