该页面包含Angular-md-datepicker的日历,其中包含以下参数:
<md-datepicker
tzoned-date
ng-model="objt.datesince"
timezone="objt.timezone"
ng-required>
</md-datepicker>
指令代码:
.directive('tzonedDate', function () {
return {
require: 'ngModel',
restrict: 'A',
link: function (scope, elem, attrs, ngModel) {
var toView = function (val) {
var momentd = moment.utc(val).utcOffset(attrs.timezone);
return new Date(momentd.format('YYYY-MM-DD'));
};
var toModel = function (val) {
return moment(val);
};
ngModel.$formatters.unshift(toView);
ngModel.$parsers.unshift(toModel);
}
};
})
实际上问题是指令中的time参数是正常传递的,但是时区参数总是为空(我尝试写 timezone =&#34; {{objt.timezone}}&#34 ; )结果是一样的。
答案 0 :(得分:1)
使用$scope.$eval:
.directive('tzonedDate', function () {
return {
require: 'ngModel',
restrict: 'A',
link: function (scope, elem, attrs, ngModel) {
ngModel.$formatters.unshift(toView);
ngModel.$parsers.unshift(toModel);
function toView(val) {
//var momentd = moment.utc(val).utcOffset(attrs.timezone);
//Use scope.$eval
var timezone = scope.$eval(attrs.timezone);
var momentd = moment.utc(val).utcOffset(timezone);
return new Date(momentd.format('YYYY-MM-DD'));
}
function toModel(val) {
return moment(val);
}
}
};
})
使用$eval
在指令范围的上下文中将时区属性评估为角度表达式。