【发布时间】:2015-01-25 03:34:43
【问题描述】:
我有一个用于 MySQL 日期字段的表单输入。例如:2015-01-31。
我想允许用户使用 3 种不同的表单输入来输入。一年一个,一个月一个,一天一个。
显然 ng-model 不能直接使用,因为我试图将日期字符串的一个 part 绑定到每个输入。我很确定这样做的方法是再见创建三个“临时”范围变量/模型
$scope.year;
$scope.month;
$scope.day;
...然后以某种方式将它们组合/绑定到实际值。
//If only it were this easy!
$scope.date = $scope.year + "-" + $scope.month + "-" + $scope.day;
上面的行当然行不通,因为这些值不是双向绑定的。如果表单仅用于保存新数据,我可以通过组合提交时的输入来摆脱这种情况。但我也需要它来处理/显示现有数据。如果我想不出办法让 Angular 的绑定魔法来做我想做的事,它会变得超级丑陋。
我发现this question 我认为它正在尝试做同样的事情,但他们使用自定义指令解决了它,这是我希望避免的。我知道这可能是一种更易于维护/便携/模块化的方式,但我是 Angular 的新手,对此有点害怕。此外,输入使用了可爱的angular-selectize 指令,这为该方法增加了一层额外的复杂性。
【问题讨论】:
-
最简单的解决方案是拥有 3 个作用域属性,然后将它们组合起来。当您从 api 获取日期时,您需要拆分字段并设置每个范围属性。您可以创建一个可重用的指令来执行此操作,以便它可以在多个地方使用
-
我认为包含三个字段并从/转换为单个日期字段的可重用指令应该是要走的路。但是为什么不使用 ui.bootstrap.datepicker 之类的日期选择器呢?
-
@WayneEllery 创建指令并仍然使用 angular-selectize 会很麻烦吗?
-
@ps0604 正如我在问题中所说,我同意指令可能“更好”,但我只是不知道该怎么做。而且我怀疑与角度选择集成会很棘手。如果它不像我想的那么难做,我愿意接受。我将再次讨论日期选择器。
-
这并不棘手,您只需在指令中使用 angular-selectize 而不是使用普通选择。如果没有指令,它会简单得多,但建议使用指令,以便可以重复使用。
标签: javascript angularjs angularjs-directive