2017-05-04 108 views
0

我有一个要求,即使用在同一表单上选择用户配置文件所确定的时区偏移来显示时间输入字段。动态更改ng-model-options属性

我定义的范围getTzOffset FN在链接功能,这样我可以在这样的NG-模型的选择使用它:

<input ng-model="myTimeObject" type="time" ... ng-model-options="{timezone: getTzOffset()}" ... >

但是,这并不工作。 getTzOffset永远不会被调用。

我正在使用带输入字段的日期选择器,它需要一个时区。我不需要修改的日期对象或字符串表示形式,我需要timezone-offset,以便datepicker可以知道如何将日期对象正确转换为UTC时间。当通过界面选择不同的用户时,我需要更改时区。

有什么办法可以动态地改变一个ng-model-options属性吗?

+0

你是否已经尝试设置一个范围的变量而不是函数?那里有任何改变? –

+0

是的,试过了。在链接函数的顶部使用偏移字符串设置作用域var。根本不起作用。只是默认为浏览器的设置。它必须是模板中的硬编码字符串,或者它不需要。 ng-model-options似乎不是一个真正的角度表达式(与文档相反)。 – Faust

+0

我已经辞去重新编译目标代码并重新插入到dom中。我有这个工作,但这不是我想要的简单解决方案。 – Faust

回答

0

您可以使用角度日期过滤选项:时区。

Sample Plunker

这个想法是使用日期过滤器的第三个参数,并通过变量来改变它。

{{ inputTime | date: "HH:mm:ss": tzInput }} 

你也可以使用$过滤器来生成代码中的值,并将其存储,如:

$scope.inputTime = $filter('date')($scope.inputTime , "HH:mm:ss", $scope.tzInput); 
+0

我的模型是日期时间对象,而不是字符串。为了清晰起见,我添加了一些更多的html。 – Faust

+0

角度日期过滤器对Date对象也有效...... – dev8080

+0

但它返回一个字符串。我使用带输入字段的日期选择器,它需要一个时区。我不需要修改日期对象或它的字符串表示,我需要时区,以便datepicker可以知道如何操作日期对象。 (澄清我的问题) – Faust