开场白
开始使用
API
- API: The <client-only> Component
- API: <nuxt-child> 组件
- API: <nuxt-link> 组件
- API: <nuxt> 组件
- API: 构建配置
- API: buildDir 属性
- API: 缓存配置
- API: CSS 配置
- API: dev 属性配置
- API: dir 属性
- API: 环境变量配置
- API: generate 属性配置
- API: globalName 属性
- API: head 属性配置
- API: The hooks Property
- API: ignore 属性
- API: The loading indicator Property
- API: loading 属性配置
- API: The mode Property
- API: modern 属性
- API: modules 属性
- API: modulesDir 属性
- API: performance 属性
- API: plugins 属性配置
- API: The render Property
- API: rootDir 属性配置
- API: router 属性配置
- API: server 属性
- API: serverMiddleware 属性
- API: srcDir 属性配置
- API: transition 属性配置
- API: vue.config 属性
- API: watch 属性
- API: watchers 属性
- API: 上下文对象
- API: asyncData 方法
- API: The Builder Class
- API: The Generator Class
- API: The ModuleContainer Class
- API: The Nuxt Class
- API: The Renderer Class
- API: Nuxt Modules Intro
- API: nuxt.renderAndGetWindow(url, options)
- API: nuxt.renderRoute(route, context)
- API: nuxt.render(req, res)
- API: Nuxt(options)
- API: fetch 方法
- API: head 方法
- API: key 属性
- API: layout 属性
- API: loading 属性
- API: middleware 属性
- API: scrollToTop 属性
- API: transition 属性
- API: validate 方法
- API: The watchQuery Property
配置
- 外部资源
- 预处理器
- JSX
- Postcss 插件
- 如何扩展 Webpack 的配置
- Webpack 插件
- Caching Components
- 如何更改应用的主机和端口配置?
- 如何集成 Google 统计分析服务?
- 如何发起跨域资源请求?
- How to extend Webpack to load audio files?
部署
- 如何使用 Now.sh 进行部署?
- 使用 Surge.sh 部署
- 在 Google App Engine 上部署
- Netlify 部署
- AWS: S3+Cloudfront 部署
- Dokku 部署
- nginx 代理
- 如何部署至 GitHub Pages?
- 部署至 Heroku
其他
插件
Nuxt.js允许您在运行Vue.js应用程序之前执行js插件。这在您需要使用自己的库或第三方模块时特别有用。
需要注意的是,在任何 Vue 组件的生命周期内, 只有 beforeCreate
和 created
这两个方法会在 客户端和服务端被调用。其他生命周期函数仅在客户端被调用。
使用第三方模块
我们可以在应用中使用第三方模块,一个典型的例子是在客户端和服务端使用 axios 做 HTTP 请求。
首先我们需要安装 npm 包:
npm install --save axios
然后,在页面内这样使用:
<template>
<h1>{{ title }}</h1>
</template>
<script>
import axios from 'axios'
export default {
async asyncData ({ params }) {
let { data } = await axios.get(`https://my-api/posts/${params.id}`)
return { title: data.title }
}
}
</script>
使用 Vue 插件
假如我们想使用 vue-notifications 显示应用的通知信息,我们需要在程序运行前配置好这个插件。
首先增加文件 plugins/vue-notifications.js
:
import Vue from 'vue'
import VueNotifications from 'vue-notifications'
Vue.use(VueNotifications)
然后, 在 nuxt.config.js
内配置 plugins
如下:
module.exports = {
plugins: ['~/plugins/vue-notifications']
}
想了解更多关于 plugins
的配置,请参考 插件 API 文档。
ES6 插件
如果插件位于node_modules
并导出模块,需要将其添加到transpile
构建选项:
module.exports = {
build: {
transpile: ['vue-notifications']
}
}
您可以参考 构建配置 文档来获取更多构建选项。
注入 $root 和 context
有时您希望在整个应用程序中使用某个函数或属性值,此时,你需要将它们注入到Vue实例(客户端),context(服务器端)甚至 store(Vuex)。按照惯例,新增的属性或方法名使用$
作为前缀。
注入 Vue 实例
将内容注入Vue实例,避免重复引入,在Vue原型上挂载注入一个函数,所有组件内都可以访问(不包含服务器端)。
plugins/vue-inject.js
:
import Vue from 'vue'
Vue.prototype.$myInjectedFunction = string => console.log('This is an example', string)
nuxt.config.js
:
export default {
plugins: ['~/plugins/vue-inject.js']
}
这样,您就可以在所有Vue组件中使用该函数。
example-component.vue
:
export default {
mounted () {
this.$myInjectedFunction('test')
}
}
注入 context
context注入方式和在其它vue应用程序中注入类似。
plugins/ctx-inject.js
:
export default ({ app }, inject) => {
// Set the function directly on the context.app object
app.myInjectedFunction = string => console.log('Okay, another function', string)
}
nuxt.config.js
:
export default {
plugins: ['~/plugins/ctx-inject.js']
}
现在,只要您获得context,你就可以使用该函数(例如在asyncData
和fetch
中)。 ctx-example-component.vue
:
export default {
asyncData (context) {
context.app.myInjectedFunction('ctx!')
}
}
同时注入
如果您需要同时在context
,Vue
实例,甚至Vuex
中同时注入,您可以使用inject
方法,它是plugin导出函数的第二个参数。 将内容注入Vue实例的方式与在Vue应用程序中进行注入类似。系统会自动将$
添加到方法名的前面。
plugins/combined-inject.js
:
export default ({ app }, inject) => {
inject('myInjectedFunction', string => console.log('That was easy!', string))
}
nuxt.config.js
:
export default {
plugins: ['~/plugins/combined-inject.js']
}
现在您就可以在context
,或者Vue
实例中的this
,或者Vuex
的actions/mutations
方法中的this
来调用myInjectedFunction
方法。 ctx-example-component.vue
:
export default {
mounted () {
this.$myInjectedFunction('works in mounted')
},
asyncData (context) {
context.app.$myInjectedFunction('works with context')
}
}
store/index.js
:
export const state = () => ({
someValue: ''
})
export const mutations = {
changeSomeValue (state, newValue) {
this.$myInjectedFunction('accessible in mutations')
state.someValue = newValue
}
}
export const actions = {
setSomeValueToWhatever ({ commit }) {
this.$myInjectedFunction('accessible in actions')
const newValue = 'whatever'
commit('changeSomeValue', newValue)
}
}
只在客户端使用的插件
不支持ssr的系统,插件只在浏览器里使用,这种情况下下,你可以用 ssr: false
,使得插件只会在客户端运行。
举个例子:
nuxt.config.js
:
module.exports = {
plugins: [
{ src: '~/plugins/vue-notifications', ssr: false }
]
}
plugins/vue-notifications.js
:
import Vue from 'vue'
import VueNotifications from 'vue-notifications'
Vue.use(VueNotifications)
您可以通过检测process.server
这个变量来控制插件中的某些脚本库只在服务端使用。当值为 true
表示是当前执行环境为服务器中。 此外,可以通过检查process.static
是否为true
来判断应用是否通过nuxt generator
生成。您也可以组合process.server
和process.static
这两个选项,确定当前状态为服务器端渲染且使用nuxt generate
命令运行。
注意:由于Nuxt.js 2.4
,模式已被引入作为插件的选项来指定插件类型,可能的值是:client
或 server
, ssr:false
在下一个主要版本中弃用,将过渡为 mode: 'client'
。
例子:
nuxt.config.js
:
export default {
plugins: [
{ src: '~/plugins/both-sides.js' },
{ src: '~/plugins/client-only.js', mode: 'client' },
{ src: '~/plugins/server-only.js', mode: 'server' }
]
}
传统命名插件
如果假设插件仅在 客户端 或 服务器端 运行,则 .client.js
或 .server.js
可以作为插件文件的扩展名应用,该文件将自动包含在相应客户端或者服务端上。
例子:
nuxt.config.js
:
export default {
plugins: [
'~/plugins/foo.client.js', // only in client side
'~/plugins/bar.server.js', // only in server side
'~/plugins/baz.js' // both client & server
]
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论