第7章:Element UI及Vuex
Elment UI
1.简介
Element UI是饿了么团队提供的一套基于Vue2.0的组件库,可以快速搭建网站,提高开发效率
ElementUI PC端
MintUI 移动端
官网
2.快速上手
初始化
D:\vue.js\code\day04>vue init webpack-simple element-demo
2.1 安装element-ui
注意:本次使用版本安装因为学习视频版本的v1版本,不使用版本安装会安装v2版本,在配置样式不一样
cd element-demo cnpm install cnpm install element-ui@1.4.13 -S
2.2 在main.js中引入并使用组件
import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-default/index.css' // 样式文件需要单独引入,v2版本名字为theme-chalk
import App from './App.vue'
// 引入后使用
Vue.use(ElementUI)
new Vue({
el: '#app',
render: h => h(App)
})
这种引入方式引入所有组件,这样引入的模块较多,还可以按需引入
2.3 在webpack.config.js中添加loader
CSS样式和字体图标都需要相应的loader来加载所以需要style-loader ,css-loader
默认并没有style-loader模块,所以需要单独安装
cnpm install style-loader -D
修改webpack.config.js增加css文件及字体等文件的解析loader,增加以下代码
{
test:/\.css$/,
loader:'style-loader!css-loader'
},
{
test: /\.(eot|svg|ttf|woff|woff2)(\?\S*)?$/,
loader: 'file-loader'
},
2.4使用组件
使用按钮,编辑App.vue增加按钮
我的按钮 我的按钮 我的按钮 我的按钮 我的按钮
分别增加了不同类型的按钮,在页面查看
图标按钮
编辑 搜索 上传
页面显示
图标
页面显示
布局
welcome
to
itany
网博
welcome
to
页面显示
日期选择器
日期选择器组件
DatePicker.vue
页面显示
上传组件
Upload.vue
点击上传 只能上传jpg/png文件,且不超过500kb
App.vue
页面显示
自定义全局组件
全局组件(插件):就是可以在main.js中使用Vue.use()进行全局引入,然后在其他组件中就可以使用了,如vue-router
import VueRouter from 'vue-router' Vue.use(VueRouter)
普通组件(插件):每次使用都要引入,如axios
import axiso from 'axios'
自定义组件
初始化项目
vue init webpack-simple component-demo
在文件夹src下插件组件目录components在该目录下再新建目录user
插件组件文件src/components/user/Login.vue
{{msg}}
创建src\components\user\index.js引入,需要有install方法
import Login from './Login.vue'
export default {
install:function(Vue){
Vue.component('Login',Login)
}
}
在main.js中引入使用
import Vue from 'vue'
import App from './App.vue'
import Login from './components/user'
Vue.use(Login);
new Vue({
el: '#app',
render: h => h(App)
})
修改App.vue引用组件
启动
cnpm run dev
页面显示
Vuex
1.简介
Vuex是一个专门为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态,以一种可预测的方式发生改变。
简单来说,用来集中管理数据。 基于Flux的前端状态管理框架。
官网
2.基本用法
初始化
D:\vue.js\code\day04>vue init webpack-simple vuex-demo
2.1 安装vuex
cd vuex-demo cnpm install vuex -S
启动
cnpm install cnpm run dev
2.2 创建store.js文件,在main.js文件中导入并配置store选项
import Vue from 'vue'
import App from './App.vue'
import store from './store.js' // 导入store对象
new Vue({
store:store, // 配置store选项,指定为store对象,会自动将store对象注入到所有子组件中,在子组件中通过this.$store访问该store对象
el: '#app',
render: h => h(App)
})
2.3编辑store.js文件
Vuex的核心是Store(仓库),相当于一个容器,一个store实例中可以包含以下的属性和方法
state 定义属性(状态,数据)
getters 用来获取属性
actions 定义方法(动作)
commit 提交变化,修改数据的唯一方式就是显示提交mutations
mutations
store.js
// vue的配置 import Vue from 'vue' import Vuex from 'vuex'// 定义属性,数据 Vue.use(Vuex); var state={ count:6 }
// 创建store对象 const store=new Vuex.Store({ state })
// 导出store对象 export default store;
2.4编辑App.vue
在子组件中访问store对象的两种方式
方式1:通过this.$store访问
方式2:通过mapGetters,mapActions访问,vuex提供了两个方法
mapGetters 获取属性(数据)
mapActions 获取方法(动作)
使用方式2的代码store.js
// vue的配置
import Vue from 'vue'
import Vuex from 'vuex'
// 定义属性,数据
Vue.use(Vuex);
var state={
count:6
}
// 定义getters
var getters={
count(state){
return state.count
}
}
// 创建store对象
const store=new Vuex.Store({
state,
getters
})
// 导出store对象
export default store;
App.vue
当前数字为:{{count}}
页面显示
下面定义方法改变这个值
修改代码store.js
// vue的配置
import Vue from 'vue'
import Vuex from 'vuex'
// 定义属性,数据
Vue.use(Vuex);
var state={
count:6
}
// 定义getters
var getters={
count(state){
return state.count
}
}
// 定义actions,要执行的操作,如流程的判断,异步请求
const actions = {
// increment(context){ // 包含commit,dispaych,state
// console.log(context)
// }
increment({commit,state}){
commit('increment'); // 提交一个名为increment的变化,这个名称可以自定义,可认为是类型名
}
}
// d定义mutations,处理状态(数据)的改变
const mutations={
increment(state){
state.count++;
}
}
// 创建store对象
const store=new Vuex.Store({
state,
getters,
actions,
mutations
})
// 导出store对象
export default store;
App.vue
当前数字为:{{count}}
页面显示
同理可添加减小的方法
点击增加或者减小执行了会记录在vue调试工具里面
项目结构
Vuex 并不限制你的代码结构。但是,它规定了一些需要遵守的规则:
-
应用层级的状态应该集中到单个 store 对象中。
-
提交 mutation 是更改状态的唯一方法,并且这个过程是同步的。
-
异步逻辑都应该封装到 action 里面。
只要你遵守以上规则,如何组织代码随你便。如果你的 store 文件太大,只需将 action、mutation 和 getter 分割到单独的文件。
对于大型应用,我们会希望把 Vuex 相关代码分割到模块中。下面是项目结构示例:
├── index.html
├── main.js
├── api
│ └── ... # 抽取出API请求
├── components
│ ├── App.vue
│ └── ...
└── store
├── index.js # 我们组装模块并导出 store 的地方
├── actions.js # 根级别的 action
├── mutations.js # 根级别的 mutation
└── modules
├── cart.js # 购物车模块
└── products.js # 产品模块