You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
熟悉 Nuxt.js 的同学,会发现配置 meta info 的 keyName 不一致。可以通过下面的配置方法来修改:
// vue-meta configuration
Vue.use(Meta, {
keyName: 'head', // the component option name that vue-meta looks for meta info on.
attribute: 'data-n-head', // the attribute name vue-meta adds to the tags it observes
ssrAttribute: 'data-n-head-ssr', // the attribute name that lets vue-meta know that meta info has already been server-rendered
tagIDKeyName: 'hid' // the property name that vue-meta uses to determine whether to overwrite or append a tag
})
import app from './app'
const router = app.$router
const meta = app.$meta() // here
export default (context) => {
router.push(context.url)
context.meta = meta // and here
return app
}
在 Vue SPA 应用中,如果想要修改HTML的头部标签,或许,你会在代码里,直接这么做:
今天给大家介绍一种更优雅的方式,去管理头部标签
vue-meta
vue-meta介绍
借用 vue-meta github 上的介绍,基于Vue 2.0 的 vue-meta 插件,主要用于管理HMTL头部标签,同时也支持SSR。
�vue-meta有以下特点:
metaInfo
,便可轻松实现头部标签的管理metaInfo
的数据都是响应的,如果数据变化,头部信息会自动更新如何使用
在介绍如何使用之前,先和大家普及一个最近很火的名词 服务端渲染(SSR, Server Side Render),简单来讲,就是在访问某个页面时,服务端会把渲染好的页面,直接返回给浏览器。
我们知道 vue-meta 是支持SSR的,下面的介绍分成两部分:
Client 客户端
在入口文件中,install vue-meta plugin
然后就可以在组件中使用了
可以看一下页面显示
熟悉 Nuxt.js 的同学,会发现配置 meta info 的 keyName 不一致。可以通过下面的配置方法来修改:
更加全面详细的api,可以参考 vue-meta github
Server 服务端
Step 1. 将 $meta 对象注入到上下文中
server-entry.js:
$meta
主要提供了,inject
和refresh
方法。inject
方法,用在服务端,返回设置的metaInfo ;refresh
方法,用在客户端,作用是更新meta信息。Step 2. 使用
inject()
方法 输出页面server.js:
源码分析
前面说了 vue-meta 的使用方法,或许大家会想这些功能是怎么实现的,那下面就和大家分享一下源码。
怎么区分 client 和 server渲染?
vue-meta 会在
beforeCreate()
钩子函数中,将组件中设置的 metaInfo ,放在 this.$metaInfo 中。我们可以在其他生命周期中,访问 this.$metaInfo 下的属性。vue-meta 会在created等生命周期的钩子函数中,监听
$metaInfo
的变化,如果发生改变,就调用$meta
下的refresh
方法。这也是metaInfo
做到响应的原因。Server端,主要是暴露
$meta
下的inject
方法,调用inject
方法,会返回对应的信息。client 和 server端 是如何修改标签的?
client端 修改标签,就是本文开头提到的 通过原生js,直接修改
server端,就是通过 text方法,返回string格式的标签
__dangerouslyDisableSanitizers
做了什么?vue-meta 默认会对特殊字符串进行转义,如果设置了
__dangerouslyDisableSanitizers
,就不会对再做转义处理。最后
最开始接触 vue-meta 是在 Nuxt.js 中。如果想了解 Nuxt.js,欢迎大家阅读 Nuxt.js实战 和 Nuxt.js踩坑分享。文中有任何表述不清或不当的地方,欢迎大家批评指正。
The text was updated successfully, but these errors were encountered: