[TOC]
Loading
nuxt.config.js
export default {
loading: false, // 关闭loading
loading: {continuous: true}, // 设置连续的
loading: { // 设置样式
color: 'blue',
height: '5px'
}
}
局部设置 loading
<template>
<h1>My page
</h1>
</template>
<script>
export default {
loading: false
}
</script>
// 通过代码控制loading
export default {
mounted() {
this.$nextTick(() => {
this.$nuxt.$loading.start()
setTimeout(() => this.$nuxt.$loading.finish(), 500)
})
}
}
使用自定义加载组件
元标签和搜索引擎优化
Nuxt.js 为您提供了 3 种不同的方式来向您的应用程序添加元数据:
- 全局使用 nuxt.config.js
- 局部使用头部作为对象
- 在本地使用 head 作为函数,以便您可以访问数据和计算属性。
全局设置
Nuxt.js 允许您使用 head 属性在 nuxt.config.js 文件中为您的应用程序定义所有默认标签。这对于为 SEO 目的添加默认标题和描述标签或设置视口或添加网站图标非常有用。
nuxt.config.js
export default {
head: {
title: 'my website title',
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{
hid: 'description',
name: 'description',
content: 'my website description'
}
],
link: [{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }]
}
}
本地设置
您还可以使用每个页面上head脚本标记内的方法为每个页面添加标题和元数据。
pages/index.vue
<script>
export default {
head: {
title: 'Home page',
meta: [
{
hid: 'description',
name: 'description',
content: 'Home page description'
}
],
}
}
</script>
--| user/
-----| index.vue
-----| one.vue
--| index.vue
页面
<template>
<h1>{{ title }}</h1>
</template>
<script>
export default {
data() {
return {
title: 'Home page'
}
},
computed: {
alternate () {
let url = 'https://www.baidu.com/'
if (this.$store.state.url) {
url = this.$store.state.url
}
return {
url
}
},
},
head() {
// 注意:在server client都会执行
// 动态值结合 computed 使用
return {
title: this.title,
meta: [
{
hid: 'description',
name: 'description',
content: 'Home page description'
}
],
script: [
{
src:
'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'
}
],
link: [
{ rel: 'canonical', href: this.alternate.url }
{
rel: 'stylesheet',
href: 'https://fonts.googleapis.com/css?family=Roboto&display=swap'
}
]
}
}
}
</script>
Nuxt.js 使用vue-meta更新应用程序的文档头和元属性。
外部资源
// nuxt.config.js
export default {
head: {
script: [
{
src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'
}
],
link: [
{
rel: 'stylesheet',
href: 'https://fonts.googleapis.com/css?family=Roboto&display=swap'
}
]
}
}
Vue Mate
{
metaInfo: {
script: [{
type: 'application/ld+json',
json: {
'@context': 'http://schema.org',
unsafe: '<p>hello</p>'
}
}]
}
}
<script type="application/ld+json">
{ "@context": "http://schema.org", "unsafe": "<p>hello</p>" }
</script>
{
metaInfo: {
script: [{
vmid: 'ldjson-schema',
innerHTML: '{ "@context": "http://schema.org" }',
type: 'application/ld+json'
}],
__dangerouslyDisableSanitizersByTagID: {
'ldjson-schema': ['innerHTML']
},
}
}
<script type="application/ld+json">{ "@context": "http://schema.org" }</script>
配置
css 属性
Nuxt.js 允许您定义要全局设置的 CSS 文件/模块/库(包含在每个页面中)。
// nuxt.config.js
export default {
css: [
// Load a Node.js module directly (here it's a Sass file)
'bulma',
// CSS file in the project
'~/assets/css/main.css',
// SCSS file in the project
'~/assets/css/main.scss'
// 注意,不写扩展名将按照['css', 'pcss', 'postcss', 'styl', 'stylus', 'scss', 'sass', 'less'] 顺序读取 命中即返回。
'~/assets/css/main', '~/assets/css/animations'
]
}
Pre-processors
<template lang="pug"> h1.red Hello {{ name }}! </template>
<style lang="scss">
.red {
color: red;
}
</style>
yarn add -D pug pug-plain-loader
yarn add -D sass sass-loader@10 fibers
PostCSS plugins
如果存在,请重命名或删除项目目录中的postss.config.js。然后,在nuxt.config.js文件中添加以下内容:
export default {
build: {
postcss: {
// Add plugin names as key and arguments as value
// Install them before as dependencies with npm or yarn
plugins: {
// Disable a plugin by passing false as value
'postcss-url': false,
'postcss-nested': {},
'postcss-responsive-type': {},
'postcss-hexrgba': {}
},
preset: {
// Change the postcss-preset-env settings
autoprefixer: {
grid: true
}
}
}
}
}
jsx
Nuxt.js 使用 @nuxt/babel-preset-app,它基于官方的 @vue/babel-preset-app 为 babel 默认配置,所以你可以在你的组件中使用 JSX。
您还可以在render 组件的方法中使用 JSX :
<script>
export default {
data () {
return { name: 'World' }
},
render (h) {
return <h1 class="red">{this.name}</h1>
}
}
</script>
如果您使用的