【发布时间】: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