我试图将日期从日期选择器值传递到$ http会话参数(如“2017-12-7”),但是我的datepicker日期变量的日期是'undefined'
angular.module('MyApp', ['ngMaterial']).controller('MyController',
function($scope, $http) {
this.myDate = new Date();
this.minDate = new Date("December 4, 2017");
this.maxDate = new Date("December 10, 2017");
$scope.getDataFromServer = function() {
var dt = this.myDate;
$http({
method : 'GET',
url : 'myurl',
params : {
pdate : this.myDate
}
}).then(function mySuccess(response) {
$scope.datacontainer= response.data;
}, function myError(response) {
});
};
});
单击按钮时会调用 $ scope.getDataFromServer 方法。 以下行 var dt = this.myDate; 用于查看chrome DevTools(F12)中的myDate对象,并显示'undefined'。
日期选择器HTML如下:
<div flex="20">
<md-datepicker ng-model="myDate" md-placeholder="Enter date" md-min-date="ctrl.minDate" md-max-date="ctrl.maxDate">
</md-datepicker>
</div>
答案 0 :(得分:2)
this.myDate
在此处被评估为未定义,因为this
在执行getDataFromServer
时处于不同的上下文中。这里的问题是您已在myDate
内初始化MyController
,并且在$scope
内定义了函数。阅读有关差异的更多信息here。
getDataFromServer
无法在myDate
内创建MyController
。
<强>解决方案:强>
在相同的上下文中定义它们。
angular.module('MyApp', ['ngMaterial']).controller('MyController',
function($scope, $http) {
var ctrl = this;
ctrl.myDate = new Date();
ctrl.minDate = new Date("December 4, 2017");
ctrl.maxDate = new Date("December 10, 2017");
ctrl.getDataFromServer = function() {
var dt = ctrl.myDate;
$http({
method : 'GET',
url : 'myurl',
params : {
pdate : ctrl.myDate
}
}).then(function mySuccess(response) {
ctrl.datacontainer= response.data;
}, function myError(response) {
});
};
});
示例:强>
angular.module('MyApp',['ngMaterial', 'ngMessages', 'material.svgAssetsCache']).controller('AppCtrl', function($scope, $http) {
var ctrl =this;
ctrl.myDate = new Date();
ctrl.value="No Date Selected";
ctrl.getDataFromServer = function() {
ctrl.value = ctrl.myDate;
}
});
<link href="https://material.angularjs.org/1.1.5/docs.css" rel="stylesheet"/>
<link href="https://cdn.gitcdn.link/cdn/angular/bower-material/v1.1.5/angular-material.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-route.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-messages.min.js"></script>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/t-114/svg-assets-cache.js"></script>
<script src="https://cdn.gitcdn.link/cdn/angular/bower-material/v1.1.5/angular-material.js"></script>
<md-content ng-controller="AppCtrl as ctrl" layout-padding="" ng-cloak="" class="datepickerdemoBasicUsage" ng-app="MyApp">
<div layout-gt-xs="row">
<div flex-gt-xs="">
<h4>Standard date-picker</h4>
<md-datepicker ng-model="ctrl.myDate" md-placeholder="Enter date"></md-datepicker>
</div>
<md-button class="md-raised" ng-click="ctrl.getDataFromServer()">Print</md-button>
</div>
{{ctrl.value}}
</md-content>
答案 1 :(得分:0)
angular.module('MyApp', ['ngMaterial']).controller('MyController',
function($scope, $http) {
var that = this;
that.myDate = new Date();
that.minDate = new Date("December 4, 2017");
that.maxDate = new Date("December 10, 2017");
$scope.getDataFromServer = function() {
var dt = that.myDate;
$http({
method : 'GET',
url : 'myurl',
params : {
pdate : that.myDate
}
}).then(function mySuccess(response) {
$scope.datacontainer = response.data;
}, function myError(response) {
});
};
});