使用$范围变量在控制器格式时$滤波器(“日期”)不更新格式($filter('date

2019-10-21 01:57发布

在角我有一个简单的下拉到设定的数据格式。
用于学习angularJS数据绑定起见,我想拦截在控制器所选择的值并且存在使用它$滤波器(“日期”)内,以改变显示日期,根据所选择的格式。

下面是HTML和控制器代码:

<select ng-model="selector">
   <option value="dd/MM/yyyy">Euro</option>
   <option value="MM/dd/yyyy">USA</option>
   <option value="yyyy/MM/dd">JPN</option>
</select>
<span>
     Formatted Date: {{ formattedDate }}
</span>


$scope.selector = 'MM/dd/yyyy';
var nowDate = new Date();
$scope.formattedDate = $filter('date')(nowDate, $scope.selector);

通过从下拉列表中选择一个新值下,选择变量设置正确,但formattedDate不会改变,但它仍然初始化为第一个值。

通过在HTML中使用角度滤波器正常工作:

{{ nowDate | date : selector}}

Answer 1:

观看方式

添加$watch火上过滤器selector的变化:

$scope.$watch(function () {
  return $scope.selector;
 },
  function (newValue, oldValue) {
    $scope.formattedDate = $filter('date')(nowDate, newValue);
 });

演示1 小提琴


的路恰克

设置ng-chage指令<select>

$scope.fireFilter = function(){
    $scope.formattedDate = $filter('date')(nowDate, $scope.selector);
}

HTML

<select ng-model="selector" ng-change="fireFilter()">

演示2 小提琴


为了更好的表现,我会用ng-chage方式



文章来源: $filter('date') not updating format when using $scope variable for format in controller