【问题标题】:Save state of ng-change local scope in Datepicker在 Datepicker 中保存 ng-change 本地范围的状态
【发布时间】:2018-10-28 08:19:26
【问题描述】:

我遇到了一个看似非常简单的问题,但我不知道如何解决它。我最初发布了this question,但似乎问题出在范围上。

所以基本上,这就是正在发生的事情:

  • 我在表单中有一个日期选择器。当用户选择日期时,ng-change 将触发并调用函数setDate(date)
  • 在调试模式下,我确认所选数据确实已传递给函数。
  • 在函数内部,$scope.simStartDate 变量被赋予了这个值,我可以看到它的值在变化。
  • 但是,当我稍后提交表单时,$scope.simStartDate 又回到了原来的初始化值。
  • 我在初始化$scope.simStartDate = new Date() 处设置了断点,但没有命中。这意味着该变量不会再次初始化。
  • 我已经尝试在 ng-model 中使用 $scope 变量,但仍然是同样的问题。

这让我觉得 ng-change 创建了一个本地范围并更新了一个本地变量,我以后无法访问。我的理解正确吗?如果不是,我该如何解决?

这是我的 HTML:

<div class="row" ng-controller="DashboardParamsFormCtrl">
    <div class="col-sm-6">
        <div class="form-group">
            <label for="inputFirstName">Simulation start date</label>
            <p class="input-group">
                <input type="text" class="form-control"
                       uib-datepicker-popup="{{format}}"
                       datepicker-options="options"
                       ng-model="date"
                       ng-change="setDate(date)"
                       is-open="opened" ng-required="true"
                       close-text="Close"
                       alt-input-formats="altInputFormats"
                       show-button-bar="true" />
                <span class="input-group-btn">
                    <button type="button" class="btn btn-default"
                            ng-click="open()">
                        <i class="glyphicon glyphicon-calendar"></i>
                   </button>
               </span>
            </p>
        </div>
    </div>

这是JS:

    angular.module('BlurAdmin.pages.dashboard')
        .controller('DashboardParamsFormCtrl', DashboardParamsFormCtrl);

    /** @ngInject */
    function DashboardParamsFormCtrl(baConfig, layoutPaths, baUtil, $scope)
    {
       $scope.ParamsFormBtnClicked = function()
       {
           console.log("Date: " + $scope.simStartDate);
       }

        $scope.open = open;

        $scope.opened = false;
        $scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];
        $scope.format = $scope.formats[0];
        $scope.options = {
            showWeeks: false
        };
        function open() {

            $scope.opened = true;
        }

        $scope.simStartDate = new Date();
        $scope.date = new Date();

        $scope.setDate = function(startDate)
        {
            $scope.simStartDate = startDate;
        }

    }
})();

谢谢。

【问题讨论】:

    标签: javascript angularjs angularjs-scope angularjs-ng-change


    【解决方案1】:

    你传递的新日期();没有价值,它将获得当前日期。您应该在 new date() 中传递 ng-model 值;

    像这样。

    $scope.simStartDate = new Date(date);
    $scope.date = new Date(date); 
    

    希望这个链接也能帮助到你plnkr

    【讨论】:

      猜你喜欢
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      相关资源
      最近更新 更多