Angular ui-sref,无法格式化日期输入

时间:2017-02-09 19:17:02

标签: angularjs date formatting angular-ui-router

尝试附加带有日期的GET URL,但需要采用格式" yyyyMMdd00"。

尽管在这里尝试了所有解决方案:

AngularJS - convert dates in controller

Binding value to input in Angular JS

我只能以中等格式制作日期:dateFrom%3DFri + Feb + 24 + 2017 + 00%3A00%3A00 + GMT%252B0000 +%28GMT + Standard + Time%29

或者什么都没有出现。

HTML(h3生成我要添加到我的网址的内容):

     <ion-content class="item-input">
<label class="item-input">
    <span class="input-label">Date From</span>
    <input type="date" ng-model="dateFrom">
</label>
<h3>{{dateFrom | date: "yyyyMMdd00"}}</h3>

<a ui-sref="date({dateFrom:dateFrom})">Go</a>
</ion-content>

控制器

     .controller("DateCtrl", function ($scope, $stateParams, dateService) {
$scope.events = dateService.getEvents($stateParams.dateFrom).then(function (events) {
    $scope.events = events;

});

厂:

      .factory('dateService', function ($http) {
    var events = [];

    return {
        getEvents: function (date) {
            var params = {
                dateFrom: date
            }

            return $http.get('URL', { params: params }).then(function (response) {
                events = response.data.events;
                return response.data.events;
            });

最后是路由:

   .state('date', {
    url: "/date/:dateFrom",
    templateUrl: "templates/Date.html",
    controller: "DateCtrl"
})

1 个答案:

答案 0 :(得分:1)

使用$urlMatcherFactoryProvider.type

使用type,您可以访问控制器中的解码对象等。

稍微更新状态声明:

   .state('date', {
    url: "/date/{dateFrom:dateType}", // Use type "dateType" here
    templateUrl: "templates/Date.html",
    controller: "DateCtrl"
})

将此包含在路线文件中:

$urlMatcherFactoryProvider.type('dateType', {
  encode: function(date) {
    // Convert date object to URL format
    var format = 'yyyyMMdd00';
    return $filter('date')(date, format);
  },
  decode: function(dateStr) {
    // Convert URL date to date object
    var year = parseInt(dateStr.slice(0, 4));
    var month = parseInt(dateStr.slice(4, 6));
    var day = parseInt(dateStr.slice(6, 8));
    var date = new Date(year, month, day)
    return date;
  },
  is: function(item) {
    return true;
  }
});

此外,如果项目中已包含日期,请使用moment.js来序列化和反序列化日期。