安装vue脚手架
cmd指令 :
vue create topline-admin
//topline-admin 文件夹名称
//选择默认或者自定义
views
views
:放界面组件components
:放小功能组件router
: 路由管理package.json
第六行的"serve": "vue-cli-service serve ",
变为 "serve": "vue-cli-service serve --open",
可以实现打开路由自动打开项目网页下载 vue-router 代码:npm install vue-router --save-dev
下载 less 代码 : npm install -D less-loader less
( 使用sess的下包方法 ) //方便布局 使用方法 : 要在style标签内部写 lang=“less” 并 添加一个 scoped
作用 : 本页面的样式不会影响到其他页面 只会作用在本页面
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
//1. 导入组件
import login from '@/views/login' // 在src 中设置views文件夹 并创建 login文件夹 包含一个 index.vue
//在Vue_cli项目里@代表src的目录
//2. 设置路由规则
const routes= [
{path : '/login' , component:login},
{path :'/' , redirect : '/login'} //重定向 打开网页第一个看见的就是这个网页
]
//3. 创建路由对象
const router = new VueRouter({
routes
})
//4. 把路由对象暴露出去
export default router; //在main.js中 挂载 router
//在main.js中的挂载
import router from '@/router/'//导入
new Vue({
router,
render: h => h(App),
}).$mount('#app')
<div class="app">
<router-view></router-view> //路由出口
</div>
npm码 : npm i element-ui
导入 饿了么在全局样式
设置全局基础样式表 安装在 scr 下的assets下 在main.js中导入全局样式 impor ' @/assets/base.less '
npm install --save axios
import axios from 'axios'
axios.defaults.baseURL = "http://ttapi.research.itcast.cn"
// 设置基地址Vue.prototype.$axios = axios;
//添加到原型中 就能通过 this.$axios+请求方式() 发送请求以浮动为主布局display:flex justify-content: center align-item : center
因为有表单而且是登录页面 所以进行规则判断
1.1 需要 包裹在` ` 标签下 并且设置需要绑定的data值 一般为 form
即为 `` 方便对form 进行取值
1.2.1 设置规则 规则名称为 : `rules:{}` 写在`data` 内 与`form`同级
1.2.2 规则内语法: 规则名 : [
{ required: true // : 是否必填
pattern :"0?(13|14|15|18|17)[0-9]{9}" // 正则表达式的规则
message: "手机号不能为空" // : 没有按照规则填写 提示文字
trigger: "blur" // : 何时进行判断
}] ( 一个规则名 可以设置多组规则 规则是数组包着对象 )
1.2.3 先在 `` 标签内添加 规则名 (使用规则)
即为 : ``
1.2.4 在需要使用规则的地方添加 ` prop=" 规则名 " `
即为 ` `
在
中设置 ref=“form”
即为
才能使用下面方法 进行表单判断
this.$refs[formName].validate((valid) => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
}
});
npm install vuex --save
store
文件夹( index.js) 保存 vuexstore
中import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
//获取 localStorage 中的 userInfo
let local = JSON.parse(window.localStorage.getItem('userInfo'))
export default new Vuex.Store({ //原样:const store = new Vuex.Stor 这个方法可以直接暴露接口
//仓库:
state: {
userInfo: local ? local : {},
},
//方法
mutations: {
changeUserInfo(state, newObj) {
Object.assign(state.userInfo, newObj) //es6 新语法 类似遍历
// 把数据保存起来,存到localStorage
window.localStorage.setItem('userInfo', JSON.stringify(state.userInfo))
}
}
})
import store from './store'
new Vue({
router,
store,
render: h => h(App),
}).$mount('#app')
this.$store.commit( ' changeUserInfo' , res.data.data )
this.$ 挂载的vuex 名 ( ' vuex 文件中需要使用的方法 ' , 保存的数据 )
设置
作为路由出口
el-menu
添加 router
属性就能通过
直接访问到 指定子组件 index后面接 地址@command = ' 点击事件名 '
点击事件名 (cmd) {
if( cmd == '专属事件名' ) {
事件
}else if( cmd == ' 另外一个专属事件名 ' ){
另外一个事件}
}
属于home的子组件 所以组件文件夹放在home文件下 创建一个名为 article 的文件
在路由文件夹 在路由规则下 在home 规则下 逗号 设置子组件 如下:
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
// 在发送请求之前做些什么
//每个发送请求的地方 需要固定添加的内容
//添加请求头:
const obj = JSON.parse(window.localStorage.getItem('userInfo'))
if(obj) {
config.headers.Authorization = `Bearer ${obj.token}`
}
return config;
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error);
});
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
// 对响应数据做点什么
return response;
}, function (error) {
// 对响应错误做点什么
//如果没有token 直接登录:
if(error.response.status == 401) {
Vue.prototype.$message.error('on')
router.push('/login')
}
return Promise.reject(error);
});
scope.row
代表当前行的数据
内设置基本样式npm码:npm install vue-quill-editor --save
代码段:
<template>
<quillEditor v-model="form.content"></quillEditor>
</template>
<script>
import "quill/dist/quill.core.css";
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";
import { quillEditor } from "vue-quill-editor";
export default {
name: "Editor",
components :{
quillEditor,
},
data() {
return {
form:{
content:'',
},
}
},
};
</script>
<style lang="stylus" scoped></style>
使用地方: 有些组件需要在多处使用
1.1 在父组件中导入组件 import 组件名 from "路径";
1.2 components
导入组件 名
1.3 在需要导入组件的位置 写上组件名标签 并 绑定属性值( a ) 并在 data中书写
2.1 props:[ 父组件绑定的属性值(a) ]
2.2在子组件中 input
标签需要设置 :value
单向绑定值 父组件中绑定的属性值 (a)
2.3 子组件@事件名(b) = " $emit ( ' 事件名 ' , $event) "
2.4 子组件 通过model : [ prop: ' 绑定的值 ', event: "事件名" ]
图片上传:
<el-upload
:on-success="handleAvatarSuccess" //上传成功后 调用的函数
action="http://ttapi.research.itcast.cn/mp/v1_0/user/images" //必有 上传路劲
:headers="headers" //设置请求头
:show-file-list="false" //隐藏上传列表
name="image" //修改请求的名称 接口里是image 但是element-ui 内的默认接口是file
>
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
data() {
return {
headers: {
Authorization: `Bearer ${this.$store.state.userInfo.token}` //请求头
}
};
},
handleAvatarSuccess() {
this.$message.success("上传成功!");
this.pagination(); //刷新
},