@Bios
2018-12-10T08:37:39.000000Z
字数 2556
阅读 1449
NuxtJs
Vue
基于
nuxt2.0
$ yarn create nuxt-app <项目名>
或者:
$ npx create-nuxt-app <项目名>
确保安装了npx(npx在NPM版本5.2.0默认安装了)
生成的目录结构
├─assets 资源目录,未编译的静态资源如less、js
├─components 组件目录
├─layouts 布局目录
├─middleware 中间件
├─node_modules
├─pages 页面目录
├─index.vue
├─....
├─plugins 插件
├─static 静态文件目录
├─store vuex store
$ yarn add node-sass sass-loader -D
用
yarn
安装node-sass
可能会报错,可以用npm
安装
安装成功之后,就可以写sass了。
// nuxt.config.js
css: [
'@/assets/css/index.scss'
]
async asyncData ({ app }) {
let { data } = await app.$axios.get('https://api.myjson.com/bins/cg8ga')
return { data }
}
$ yarn add @nuxtjs/axios @nuxtjs/proxy
// nuxt.config.js
modules: [
'@nuxtjs/axios'
],
// 跨域代理
axios: {
prefix: '/api',
proxy: true // Can be also an object with default options
},
proxy: {
'/api': {
target: 'http://xxx',
pathRewrite: {'^/api/': ''}
}
},
// plugins/axios.js
export default function ({ $axios, redirect }) {
$axios.onRequest(config => {
// console.log(1)
console.log('Making request to ' + config.url)
})
$axios.onResponse(response=>{
if (process.browser) { //判断是否为客户端
console.log('on response!')
}
})
$axios.onError(error => {
const code = parseInt(error.response && error.response.status)
if (code === 400) {
redirect('/400')
}
})
}
// nuxt.config.js
plugins: [
'~/plugins/axios'
],
head: {
title: 'xxx',
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ hid: 'description', name: 'description', content: pkg.description }
],
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
{ rel: 'stylesheet', type: 'text/css', href: 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'}
],
script: [
{src: 'https://code.jquery.com/jquery-3.1.1.min.js'},
{src: 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js'}
]
}
$ yarn add element-ui
// plugins/element-ui.js
import Vue from 'vue'
import ElementUI from 'element-ui'
export default ()=>{
Vue.use(ElementUI)
}
// nuxt.config.js
css:[
'element-ui/lib/theme-chalk/index.css'
],
plugins:[
'~/plugins/element-ui'
]
到此,就可以在页面中使用了。
要安装babel-plugin-component
$ yarn add babel-plugin-component -D
// plugins/element-ui.js
import Vue from 'vue'
import {Button} from 'element-ui' // 引入按钮组件
export default ()=>{
Vue.use(Button)
}
assets
文件目录下nuxt.config.js
中配置css
css: [
'@assets/font-awesome-4.7.0/css/font-awesome.min.css'
]
可以将解压出来的文件中的Less和sass文件删除,只保留css文件。也可以只保留sass或者less。减少没有用的代码!
// plugins/vue-inject.js
import Vue from 'vue'
Vue.prototype.$myInjectedFunction = (string) => console.log("This is an example", string)
// nuxt.config.js
plugins: ['~/plugins/vue-inject']
在页面中使用
this.$myInjectedFunction('test')
调用