继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

ionic3 自定义时间Pipe(多语言版)

MYYA
关注TA
已关注
手记 460
粉丝 75
获赞 327

使用date-fns库,是一个轻量级的日期库,提供了各种格式化日期函数。

1. 安装date-fns库
$ npm install date-fns --save
2. 新建一个Pipe
$ ionic g pipe relative-time

成功后结构如下


图片.png

3. 将pipes的Module导入到app.module(懒加载导入到页面的Module)
import { pipesModule } form '../pipes/pipes.module';

...........@NgModule({  import: [
    PipesModule,
    IonicModule.forRoot(MyApp)
  ]
})
4. 修改relative-time文件
import { Pipe, PipeTransform } from '@angular/core';import distanceInWordsToNow from 'date-fns/distance_in_words_to_now';import enUS from 'date-fns/locale/en';import zhCN from 'date-fns/locale/zh_cn';import zhTW from 'date-fns/locale/zh_tw';import { Events } from 'ionic-angular';import { StorageServiceProvider } from '../../providers/storage-service/storage-service';

@Pipe({  name: 'relativeTime',
})export class RelativeTime implements PipeTransform {

  language: any; // 使用语言
  constructor(private storageService: StorageServiceProvider,
    private events: Events) {    
   this.setLanguage();    //语言切换后更改(当语言切换成功后需发布一个通知,在这里进行监听)
    this.events.subscribe('set:language',() => {      this.setLanguage();
    });
  }  /**
   * 判断当前使用语言
   */
  setLanguage() {    //获取当前语言(根据自己多语言切换时存储的值进行判断)
    let l = this.storageService.read('language');    if (l == 'zh-HK') {      this.language = zhTW;
    } else if (l == 'zh-CN') {      this.language = zhCN;
    } else {      this.language = enUS;
    }
  }  /**
   * Takes a value and makes it lowercase.
   */
  transform(value: string, ...args) {    return distanceInWordsToNow(new Date(value), {      addSuffix: true,      locale: this.language
    });
  }
}

例如:当语言切换时保存一个判断值与发布一个events


图片.png

5. 使用,time需是一个时间串(如毫秒数或时间格式)
<p> {{ time| relativeTime}} </P>
6. 效果

图片.png

如果切换语言后,时间语言并未发生变化,检查语言是否设置正确与语言变化后数据是否已重新渲染



作者:No刹那光辉
链接:https://www.jianshu.com/p/90cfd684278c


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP