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增加按钮
<br>
<!-- 按钮 -->
<el-button type="primary">我的按钮</el-button>
<el-button type="danger">我的按钮</el-button>
<el-button type="info">我的按钮</el-button>
<el-button type="warning">我的按钮</el-button>
<el-button type="success">我的按钮</el-button>
<br>
分别增加了不同类型的按钮,在页面查看

图标按钮
<el-button type="success" icon="edit">编辑</el-button> <el-button type="success" icon="search">搜索</el-button> <el-button type="primary">上传<i class="el-icon-upload el-icon--right"></i></el-button>
页面显示

图标
<!-- 图标 -->
<i class="el-icon-close"></i>
<i class="el-icon-delete"></i>
<i class="el-icon-loading"></i>
页面显示

布局
<!-- 布局 -->
<el-row>
<el-col :span="6" class="grid">welcome</el-col>
<el-col :span="6" class="grid">to</el-col>
<el-col :span="6" class="grid">itany</el-col>
<el-col :span="6" class="grid">网博</el-col>
</el-row>
<el-row>
<el-col :span="12" class="grid">welcome</el-col>
<el-col :span="12" class="grid">to</el-col>
</el-row>
页面显示

日期选择器
<!-- 日期选择器 -->
<DatePicker></DatePicker>
日期选择器组件
DatePicker.vue
<template>
<el-date-picker
v-model="value"
type="date"
placeholder="选择日期"
size="small"
:picker-options="options">
</el-date-picker>
</template>
<script>
export default {
data(){
return {
value:'',
options:{
disabledDate(time) {
return time.getTime() < Date.now() - 8.64e7;
},
firstDayOfWeek:1
}
}
}
}
</script>
页面显示

上传组件
Upload.vue
<template>
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:on-remove="handleRemove"
:file-list="fileList">
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>
</template>
<script>
export default {
data(){
return {
fileList: [
{
name: 'food.jpeg',
url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
},
{
name: 'food2.jpeg',
url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
}
]
}
},
methods: {
handleRemove(file, fileList) {
console.log(file, fileList);
},
handlePreview(file) {
console.log(file);
}
}
}
</script>
App.vue
<DatePicker></DatePicker>
<!-- 文件上传 -->
<Upload></Upload>
页面显示


自定义全局组件
全局组件(插件):就是可以在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
<template>
<div id="login">
{{msg}}
</div>
</template>
<script>
export default{
data(){
return{
msg:"用户登录"
}
}
}
</script>
<style scoped>
#login{
color:red;
font-size:20px;
text-shadow:2px 2px 5px;
}
</style>
创建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引用组件
<template> <div id="app"> <Login></Login> </div> </template>
启动
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
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
<template>
<div id="app">
<button>增加</button>
<button>减小</button>
<p>当前数字为:{{count}}</p>
</div>
</template>
<script>
// 方式2导入辅助函数
import {mapGetters} from 'vuex'
export default {
name: 'app',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
},
// 方式1 通过this.$store访问
// computed:{
// count(){
// return this.$store.state.count;
// }
// }
// 方式2
computed:mapGetters([
'count'
])
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
页面显示

下面定义方法改变这个值
修改代码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
<template>
<div id="app">
<button @click='increment'>增加</button>
<button>减小</button>
<p>当前数字为:{{count}}</p>
</div>
</template>
<script>
// 方式2导入辅助函数
import {mapGetters,mapActions} from 'vuex'
export default {
name: 'app',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
},
// 方式1 通过this.$store访问
// computed:{
// count(){
// return this.$store.state.count;
// }
// }
// 方式2
computed:mapGetters([
'count'
]),
methods:mapActions([
'increment'
])
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
页面显示

同理可添加减小的方法
点击增加或者减小执行了会记录在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 # 产品模块