接下来,获取一个用于格式化时间持续的第三方库。
timeago npm 包接受一个日期,并返回一个描述自该日期以来已过去时间的人类可读字符串,如"刚刚"或"5 分钟前"或"3 年前"等。
将该包添加到 package.json:
// package.json "dependencies": { ... "timeago.js": "^4.0.2" 然后在你的指令模块中导入 format 辅助函数:
...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 来定期异步重新渲染已过去的时间。