场景
- 这两天在做站内私信组件, 对话列表需要展示每条私信发送日期, humans 格式
- 这样是不能在Vue组件直接使用的 {{ message.created_at.diffForHumans}}
分析
-
首先线分析一下为什么在组件中不能使用diffForHumans方法
因为 message.created_at只是一个单纯的变量 , 很显然不可能具备什么方法的
-
有办法直接在Vue组件中使用diffForHumans方法吗?
- NO
- 怎么解决这个问题呢?
通过 引入'Moment.js'
引入组件解决这个问题,有点没有必要,使用laravel的$appends属性解决这个问题
参考文档
解决
- 解决思路
- 给Model追加一个属性, 这个属性就是created_at humans形式
- Just Do
- 设置获取器
- 将获取器对应的属性添加到 $appends属性中
- 这样在model的实列中对于多出一个没有数据库对应字段的属性 ; 然后就可以在组件中作为一个正常的变量输出就可以了
/*
* 增加一个数据库中没有的字段
* */
protected $appends = ['created_at_human'];
/**
* 设置关于 create_at_human 字段的获取器
* @return mixed
*/
public function getCreatedAtHumanAttribute()
{
return Carbon::createFromTimeString($this->attributes['created_at'])->diffForHumans();
}