创建另一个具有高优先级(高于 ng-model /ng-model-option)的指令(属性类型),用于监视选项对象的更改并触发重新编译。对于缺乏细节,我深表歉意,我正在打电话:)
编辑:
看起来有一个指令叫做kcd 重新编译 http://kentcdodds.com/kcd-angular/#/kcd-recompile这正是我所描述的。这是一个工作plnkr https://plnkr.co/edit/C9t1vn?p=preview,还有一些额外的好处可以考虑美国时区的 DST。
HTML:
<div kcd-recompile="data.timezone">
<div>
<select ng-model="data.timezone" ng-options="x.offset as x.name for x in timezones">
</select>
</div>
<div>
<input type="date" ng-model="data.arrival" ng-model-options="{timezone: data.timezone}" />
</div>
<div>
<input type="time" ng-model="data.arrival" ng-model-options="{timezone: data.timezone}" />
</div>
</div>
And JS:
Date.prototype.stdTimezoneOffset = function() {
var jan = new Date(this.getFullYear(), 0, 1);
var jul = new Date(this.getFullYear(), 6, 1);
return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
}
Date.prototype.dst = function() {
return this.getTimezoneOffset() < this.stdTimezoneOffset();
}
angular.module('DemoApp', ['kcd.directives']);
angular.module('DemoApp')
.controller('DemoCtrl', ['$scope', function($scope) {
var now = new Date(),
isDst = now.dst();
$scope.data ={
arrival: now,
timezone: null
};
$scope.timezones = [
{
name: 'PST',
offset: isDst ? '-0700' : '-0800'
},
{
name: 'EST',
offset: isDst ? '-0400' : '-0500'
}
];
}]
);