模块:nuxt、vue、vue-router、vuex、elementUI、Font Awesome、Animate.css、axios
实践新语法:async-await
说说,搭建一个架构需要做的基础事项,剩下的就是堆积代码和组件
搭建架构新体会:🤔
Font Awesome
减少图片的使用;当然还有很多是没有的这里可以先使用svg进行开发,后续使用iconfont
和svg
转字体进行替换animate.css
增强页面的交互效果,一些小效果直接使用全局样式封装即可vuex
来操作vuex
带来的问题是,form
表单的处理,也就是v-model
的优势已经无法使用了,这里直接使用双向数据绑定的原理get and set
方法进行处理vuex
同步数据使用mutation
操作,异步数据先使用action
后再用mutation
操作;具体操作在下面和实际例子中都有,并且对基础方法进行了封装,使得代码数量更加的少vue-router
,使用它就忘掉<a/>
标签,有两种使用方法,一种是html
使用,一种是js
使用,具体下面有详细介绍@nuxtjs/axios and @nuxtjs/proxy
来进行配置Promise
,开发中的感受就是这简直是神迹,在使用async-await
这就是超级神迹😍react
之路,期待兴奋开心,我先健个身👨🎓记得之前在一灯
# install dependencies
$ npm install # Or yarn install
# serve with hot reload at localhost:3000
$ npm run dev
# build for production and launch server
$ npm run build
$ npm start
# generate static project
$ npm run generate
z-index
即堆叠层级说明plugins
文件夹下创建element-ui.js
文件,内容为:import Vue from 'vue'
import Element from 'element-ui'
Vue.use(Element);
nuxt.config.js
文件添加build: {
// add
vendor: ['element-ui'],
},
css: [
// add
{src:'element-ui/lib/theme-chalk/index.css'},
],
plugins: [{src:'~plugins/element-ui', ssr: true}],
使用方法还是一样的没有变化
例子:
html导航
<nuxt-link to="/test">test</nuxt-link>
js导航
this.$router.push({
path:'/user',
query:{
age:18
}
})
路由传参
注意:这种方法不能被seo到
而且当刷新页面的时候,相关数据会被清空
定义
<nuxt-link :to="{name:'login',params:{userId:'signin'}}"><div class="nav_item sign_item">登录</div></nuxt-link>
使用
<h1>{{$route.params.userId}}</h1>
nuxt.config.js
中进行配置:module.exports = {
modules: [
'@nuxtjs/axios',
'@nuxtjs/proxy',
],
proxy: {
'/api': {
target: 'http://api.douban.com',
pathRewrite: { '^/api/': '' }
}
}
}
引入
import axios from 'axios'
使用
methods:{
async requestData(){
const url = 'http://api.douban.com/v2/movie/top250?start=1&count=10';
let { data } = await axios.get('api/v2/movie/top250?start=1&count=10')
console.log(data)
return { users: data.data }
},
},
package.json
中进行配置"config":{
"nuxt":{
"post":"0.0.0.0",
"port":"3002"
}
},
assets/js/agent.js
文件assets/js/nav.js
文件assets/js/address.js
文件组件和组件之间的传值管理,即状态管理模式
ssr
中Vuex
并不是鸡肋,Vuex
更重要的是维护用户的状态Vuex
不能跨页面,只是用来管理同一个页面之间组件和组件之间的状态Vuex
解决了组件和组件之间传值的麻烦,父子、同级、子父之间定义
export const state=()=>({
amount:0
})
export const mutations={
add(state){
state.amount++;
}
}
使用
// 变量
{{$store.state.amount}}
// 方法
@click="$store.commit('add')"
定义
export const state=()=>({
amount:100
})
export const mutations={
add(state){
state.amount++;
}
}
使用
// 变量
{{$store.state.test.amount}}
// 方法
@click="$store.commit('test/add')"
// import Vue from 'vue'
// import Vuex from 'vuex'
// Vue.use(Vuex)
// const store = ()=>new Vuex.Store({
// state:{
// amount:0,
// },
// mutations:{
// add(state){
// state.amount++;
// }
// }
// })
当使用Vuex的时候,处理表单就变得不那么简单了
v-model
就足够了,但是在vuex
中却无法使用vuex
我要要在组件中使用计算属性中get and set
来结合vuex
中的state and commit
实现双向数据绑定,即:直接使用双向数据绑定的原理plugins
里面添加.js
文件,例如:import Vue from 'vue'
import axios from 'axios'
const data = {
install(Vue){
Vue.prototype.$axios = axios;
}
};
Vue.use(data)
nuxt.config.js
里面的plugins
配置,例如:plugins: [
{src:'~plugins/element-ui', ssr: true},
{src:'~plugins/address',ssr:false},
{src:'~plugins/axios',ssr:false},
],
使用
console.log(this.$axios)
async onPhoneRepeat(mobile) {
const {env,checkUserName}=this.$addr;
const params = {
loginName: mobile
};
return await this.$requestPost(this,`${env}${checkUserName}`,params);
},
错误内容
[Vue warn]: The client-side rendered virtual DOM tree is not matching server-rendered content. This is likely caused by incorrect HTML markup, for example nesting block-level elements inside<p>, or missing <tbody>. Bailing hydration and performing full client-side render.
解决办法
nuxt.config.js
中的plugins
属性,设置:plugins: [{src:'~plugins/element-ui', ssr: true}],
false
设置为true
定义
<nuxt-link :to="{name:'login',query:{userId:'signin'}}"><div class="nav_item sign_item">登录</div></nuxt-link>
使用
<h1>{{$route.query.userId}}</h1>
vuex.esm.js:383 [vuex] unknown mutation type: updatePhone
mutation
里面定义updatePhone
方法state
模块