接下来,获取一个用于格式化时间持续的第三方库。

timeago npm 包接受一个日期,并返回一个描述自该日期以来已过去时间的人类可读字符串,如"刚刚"或"5 分钟前"或"3 年前"等。

将该包添加到 package.json

// package.json
"dependencies": {
...
"timeago.js": "^4.0.2"

然后在你的指令模块中导入 format 辅助函数:

time-ago.

Permalink to "time-ago."
...
import {format} from 'timeago.js';
...
import {format} from 'timeago.js';

最后,更新 render 方法以使用 format

return format(time);

现在你应该能看到字符串更新为"刚刚"。但请注意,它还不会自动更新。

请注意,我们在这里创建的标准 Directive 比我们目前使用的功能强大得多:它们在渲染之间是有状态的,并且可以访问与其关联的底层 DOM。详情请参阅自定义指令


不过,如果我们只是想在渲染时格式化时间,根本不需要使用指令;我们可以在模板中直接调用 format 函数:

// 到目前为止,我们的指令等同于:
return html`<p>The page was rendered ${format(timeCreated)}`;

然而,普通函数无法在事后更新它们渲染的值——我们的指令需要在时间推移时定期更新渲染的字符串。这就是_异步_指令的用武之地。

为了创建一个持续更新已过去时间的模板辅助工具,接下来的步骤将展示如何使用 AsyncDirective 来定期异步重新渲染已过去的时间。