Vue和Element二 Li.072

Vue的自定义组件 自宣言组件: 本质上, 组件是带有一个名称且可复用的Vue实例 Vue.component(组件名称,{ props:组件的属性, data:组件的数据函数, template:组件解析的标签模板 } ) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>自定义组件</title> <script src="../js2/vue.js"></script> </head> <body> <div id="div"> <my-button>我的按钮</my-button> </div> </body> <script> Vue.component("my-button",{ // 属性 props:["style"] , // 数据函数 data: function (){ return{ msg:"我的按钮" } }, // 解析标签模板 template:"<button style='color:red'>{{msg}}</button>" }); new Vue({ el:"#div" }) </script> </html> Vue的生命周期 生命周期的八个阶段 状态 阶段周期 beforeCreate 创建前 created 创建后 beforeMount 载入前 mounted 载入后 beforeUpdate 更新前 updated 更新后 beforeDestroy 销毁前 destroyed 销毁后 Vue 异步操作 在Vue中发送异步请求, 本质上还是AJAX. 我们可以使用axios这个插件来简化操作 使用步骤 引入axios核心js文件 调用axios对象的方法来发起异步请求 调用axios对象的方法来处理响应的数据 axios常用方法 方法名 作用 get(请求的资源路径与请求的参数) 发起GET方式请求 post(请求的资源路径,请求的参数) 发起POST方式请求 then(reponse) 请求成功后的回调函数,通过resposnse获取响应的数据 catch(error) 请求失败后的回调函数,通过error获取错误信息 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>异步操作</title> <script src="js/vue.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> </head> <body> <div id="div"> {{name}} <button @click="send()">发起请求</button> </div> </body> <script> new Vue({ el:"#div", data:{ name:"张三" }, methods:{ send(){ // // Get方式请求 // axios.get("testServlet?name="+this.name) // .then(resp => { // alert(resp.data); // }) // .catch(error =>{ // alert(error) // }) axios.post("testServlet","name="+this.name) .then( resp =>{ alert(resp.data); }) .catch( error =>{ alert(error) }) } } }) </script> </html>

February 14, 2022&nbsp;·&nbsp;1 分钟&nbsp;·&nbsp;Lizicai

Vue和Element一 Li.071

Vue 简介 Vue 是一套构建用户界面的渐进式前端框架。 只关注视图层,并且非常容易学习,还可以很方便的与其它库或已有项目整合。 通过尽可能简单的 API来实现响应数据的绑定和组合的视图组件。 特点 易用:在有HTML CSS JavaScript 的基础上,快速上手。 灵活:简单小巧的核心,渐进式技术栈,足以应付任何规模的应用。 性能:20kb min+gzip运行大小、超快虛拟DOM、最省心的优化。 Vue 入门 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>快速入门</title> </head> <body> <div id="div"> {{msg}} </div> </body> <script src="js/vue.js"></script> <script> // 脚本 new Vue({ el:"#div", data:{ msg:"Hello Vue" } }) </script> </html> Vue 核心对象: 每一个Vue程序都是从一个Vue核心对象开始的 let vm = new Vue({ 选项列表; }) Vue的程序包含视图和脚本两个核心部分 选项列表 el选项: 用于接收获取到页面中的元素.(根据常用选择器获取) data选项: 用于保存当前Vue对象中的数据. 在视图中声明的变量需要在此处赋值 methods选项: 用于定义方法. 方法可以直接通过对象名调用, this代表当前Vue对象 数据绑定 在视图部分获取脚本部分的数据 {{变量名}} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>快速入门升级</title> </head> <body> <!-- 视图--> <div id="div"> <div>姓名:{{name}}</div> <div>班级:{{classRoom}}</div> <button onclick="hi()">打招呼</button> <button onclick="update()">修改班级</button> </div> </body> <script src="js/vue.js"></script> <script> // 脚本 let vm = new Vue({ el:"#div", data:{ name:"张三", classRoom:"不一班" }, methods:{ study(){ alert(this.name + "正在" + this.classRoom+"好好学习") } } }) // 定义打招呼的方法 function hi(){ vm.study(); } function update(){ vm.classRoom = "地球人" } </script> </html> Vue 常用指令 指令: 是带有v-前缀的我死属性, 不同指令具有不同含义. 例如v-html, v-if, v-for 使用指令时,通常编与在标签的属性上,值可以使用JS的表达式。 常用指令 指令 作用 v-html 把文本解析为HTML代码 v-bind 为HTML标签绑定属性值 v-if 条件性的渲染某元素,判定为true时渲染,否则不渲染 v-else 条件性的渲染某元素,判定为true时渲染,否则不渲染 v-else-if 条件性的渲染某元素,判定为true时渲染,否则不渲染 v-show 根据条件展示某元素, 区别在于切换的是display属性的值 y-for 列表渲染, 遍历容器的元素或者对象的厲性 v-on 为HTML标签绑定事件 v-model 在表单元素上创建双向数据绑定 文本插值 v-html: 把文本解析为HTML代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文本插值</title> </head> <body> <div id="div"> <div>{{msg}}</div> <div v-html="msg"></div> </div> </body> <script src="../js/vue.js"></script> <script> let vm = new Vue({ el:"#div", data:{ msg:"<b>Hello Vue</b>" } }) </script> </html> 绑定属性 v-bind:为HTML标签绑定属性值 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>绑定属性</title> <style> .my{ border: 1px solid red; } </style> </head> <body> <div id="div"> <a v-bind:href="url">百度一下</a> <br> <a :href="url">百度一下</a> <br> <div :class="cls">我是div</div> </div> </body> <script src="../js/vue.js"></script> <script> new Vue({ el:"#div", data:{ url:"http://www.baidu.com", cls: "my" } }) </script> </html> 条件渲染 v-if: 条件性的渲染某元素, 判定为真时渲染,否则不渲染 v-else:条件性的渲染 v-else-if:条件性的渲染 v-show:根据条件展示某元素,区别在于切换的是display属性的值 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>条件渲染</title> </head> <body> <div id="div"> <!-- 判断num的值, 对3取余, 余数为0显示div1 余数为1显示div2 余数为2显示div3--> <div v-if="num % 3 == 0">div1</div> <div v-else-if="num % 3 == 1">div2</div> <div v-else>div3</div> <div v-show="flag">div4</div> </div> </body> <script src="../js/vue.js"></script> <script> new Vue({ el:"#div", data:{ num:2, flag:false } }) </script> </html> 列表渲染 v-for:列表渲染,遍历窗口的元素或者对象的属性 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>列表渲染</title> </head> <body> <div id="div"> <ul> <li v-for="name in names"> {{name}} </li> <li v-for="value in student"> {{value}} </li> </ul> </div> </body> <script src="../js/vue.js"></script> <script> new Vue({ el: "#div", data:{ names:["张三","李四","王五"], student:{ name:"张三", age:23 } } }) </script> </html> 事件绑定 v-on: 为HTML标签绑定事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>事件绑定</title> </head> <body> <div id="div"> <div>{{name}}</div> <button v-on:click="change">改变div的内容</button> <button v-on:dblclick="change">改变div的内容</button> <button @click="change">改变div的内容</button> </div> </body> <script src="../js/vue.js"></script> <script> new Vue({ el:"#div", data:{ name:"来了呀, 老弟!" }, methods:{ change(){ this.name = "来了" } } }) </script> </html> 表单绑定, 只能表单使用 v-model:在表单元素上创建双向数据绑定 双向数据绑定 更新data数据, 页面中的数据也会更新 更新页面数据, data数据也会更新 MVVM模型(Model View ViewModel):是MVC模式的改进版 在前端页面中,JS对象表示 Model,页面表示View,两者做到了最大限度的分离。 将Model和View 关联起来的就是ViewModel,它是桥梁。 ViewModel 负责把 Model 的数据同步到 View 显示出来,还负责把 View 修改的数据同步回 Model. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表单绑定</title> </head> <body> <div id="div"> <form autocomplete="off"> 姓名: <input type="text" name="username" v-model="username"> <br> 年龄: <input type="number" name="age" v-model="age"> </form> </div> </body> <script src="../js/vue.js"></script> <script> new Vue({ el:"#div", data:{ username:"张三", age:23 } }) </script> </html> Element 组件库 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>快速入门</title> <link rel="stylesheet" href="../element-ui/lib/theme-chalk/index.css"> <script src="../js2/vue.js"></script> <script src="../element-ui/lib/index.js"></script> </head> <body> <button>我是按钮</button> <br> <div id="div"> <template> <el-row class="mb-4"> <el-button>Default</el-button> <el-button type="primary">Primary</el-button> <el-button type="success">Success</el-button> <el-button type="info">Info</el-button> <el-button type="warning">Warning</el-button> <el-button type="danger">Danger</el-button> <el-button>中文</el-button> </el-row> <br> </template> </div> </body> <script> new Vue({ el:"#div" }) </script> </html> <html lang="en"> <head> <meta charset="UTF-8"> <title>基础布局</title> <link rel="stylesheet" href="../element-ui/lib/theme-chalk/index.css"> <script src="../js2/vue.js"></script> <script src="../element-ui/lib/index.js"></script> <style> .bg-purple-dark { background: #99a9bf; } .bg-purple { background: #d3dce6; } .bg-purple-light { background: #e5e9f2; } .grid-content { border-radius: 4px; min-height: 36px; } </style> </head> <body> <div id="div"> <template> <el-row> <el-col :span="24"><div class="grid-content bg-purple-dark"></div></el-col> </el-row> <el-row> <el-col :span="12"><div class="grid-content bg-purple"></div></el-col> <el-col :span="12"><div class="grid-content bg-purple-light"></div></el-col> </el-row> <el-row> <el-col :span="8"><div class="grid-content bg-purple"></div></el-col> <el-col :span="8"><div class="grid-content bg-purple-light"></div></el-col> <el-col :span="8"><div class="grid-content bg-purple"></div></el-col> </el-row> </template> </div> </body> <script> new Vue({ el:"#div" }) </script> </html> 布局方式 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>容器布局</title> <link rel="stylesheet" href="../element-ui/lib/theme-chalk/index.css"> <script src="../js2/vue.js"></script> <script src="../element-ui/lib/index.js"></script> <style> .el-header, .el-footer { background-color: #B3C0D1; color: #333; text-align: center; line-height: 60px; } .el-aside { background-color: #D3DCE6; color: #333; text-align: center; line-height: 300px; } .el-main { background-color: #E9EEF3; color: #333; text-align: center; line-height: 600px; } </style> </head> <body> <div id="div"> <el-container> <el-header>Header</el-header> <el-container> <el-aside width="300px">Aside</el-aside> <el-container> <el-main>Main</el-main> <el-footer>Footer</el-footer> </el-container> </el-container> </el-container> </div> </body> <script> new Vue({ el:"#div" }) </script> </html> 表单组件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>容器布局</title> <link rel="stylesheet" href="../element-ui/lib/theme-chalk/index.css"> <script src="../js2/vue.js"></script> <script src="../element-ui/lib/index.js"></script> <style> </style> </head> <body> <div id="div"> <el-form ref="form" :model="form" label-width="80px"> <el-form-item label="活动名称"> <el-input v-model="form.name"></el-input> </el-form-item> <el-form-item label="活动区域"> <el-select v-model="form.region" placeholder="请选择活动区域"> <el-option label="区域一" value="shanghai"></el-option> <el-option label="区域二" value="beijing"></el-option> </el-select> </el-form-item> <el-form-item label="活动时间"> <el-col :span="11"> <el-date-picker type="date" placeholder="选择日期" v-model="form.date1" style="width: 100%;"></el-date-picker> </el-col> <el-col class="line" :span="2">-</el-col> <el-col :span="11"> <el-time-picker placeholder="选择时间" v-model="form.date2" style="width: 100%;"></el-time-picker> </el-col> </el-form-item> <el-form-item label="即时配送"> <el-switch v-model="form.delivery"></el-switch> </el-form-item> <el-form-item label="活动性质"> <el-checkbox-group v-model="form.type"> <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox> <el-checkbox label="地推活动" name="type"></el-checkbox> <el-checkbox label="线下主题活动" name="type"></el-checkbox> <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox> </el-checkbox-group> </el-form-item> <el-form-item label="特殊资源"> <el-radio-group v-model="form.resource"> <el-radio label="线上品牌商赞助"></el-radio> <el-radio label="线下场地免费"></el-radio> </el-radio-group> </el-form-item> <el-form-item label="活动形式"> <el-input type="textarea" v-model="form.desc"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="onSubmit">立即创建</el-button> <el-button>取消</el-button> </el-form-item> </el-form> </div> </body> <script> new Vue({ el:"#div", data() { return { form: { name: '', region: '', date1: '', date2: '', delivery: false, type: [], resource: '', desc: '' } } }, methods: { onSubmit() { console.log('submit!'); } } }) </script> </html> 表格组件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表格组件</title> <link rel="stylesheet" href="../element-ui/lib/theme-chalk/index.css"> <script src="../js2/vue.js"></script> <script src="../element-ui/lib/index.js"></script> </head> <body> <div id="div"> <template> <el-table :data="tableData" stripe style="width: 100%"> <el-table-column prop="date" label="日期" width="180"> </el-table-column> <el-table-column prop="name" label="姓名" width="180"> </el-table-column> <el-table-column prop="address" label="地址"> </el-table-column> <el-table-column label="操作" width="100"> <el-button size="mini" type="warning">编辑</el-button> <el-button size="mini" type="danger">编辑</el-button> </el-table-column> </el-table> </template> </div> </body> <script> new Vue({ el:"#div", data() { return { tableData: [{ date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1517 弄' }, { date: '2016-05-01', name: '王小虎', address: '上海市普陀区金沙江路 1519 弄' }, { date: '2016-05-03', name: '王小虎', address: '上海市普陀区金沙江路 1516 弄' }] } } }) </script> </html> 顶部导航栏组件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>顶部导航栏组件</title> <link rel="stylesheet" href="../element-ui/lib/theme-chalk/index.css"> <script src="../js2/vue.js"></script> <script src="../element-ui/lib/index.js"></script> </head> <body> <div id="div"> <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect"> <el-menu-item index="1">处理中心</el-menu-item> <el-submenu index="2"> <template slot="title">我的工作台</template> <el-menu-item index="2-1">选项1</el-menu-item> <el-menu-item index="2-2">选项2</el-menu-item> <el-menu-item index="2-3">选项3</el-menu-item> <el-submenu index="2-4"> <template slot="title">选项4</template> <el-menu-item index="2-4-1">选项1</el-menu-item> <el-menu-item index="2-4-2">选项2</el-menu-item> <el-menu-item index="2-4-3">选项3</el-menu-item> </el-submenu> </el-submenu> <el-menu-item index="3" disabled>消息中心</el-menu-item> <el-menu-item index="4"><a href="https://www.ele.me" target="_blank">订单管理</a></el-menu-item> </el-menu> <div class="line"></div> <el-menu :default-active="activeIndex2" class="el-menu-demo" mode="horizontal" @select="handleSelect" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b"> <el-menu-item index="1">处理中心</el-menu-item> <el-submenu index="2"> <template slot="title">我的工作台</template> <el-menu-item index="2-1">选项1</el-menu-item> <el-menu-item index="2-2">选项2</el-menu-item> <el-menu-item index="2-3">选项3</el-menu-item> <el-submenu index="2-4"> <template slot="title">选项4</template> <el-menu-item index="2-4-1">选项1</el-menu-item> <el-menu-item index="2-4-2">选项2</el-menu-item> <el-menu-item index="2-4-3">选项3</el-menu-item> </el-submenu> </el-submenu> <el-menu-item index="3" disabled>消息中心</el-menu-item> <el-menu-item index="4"><a href="https://www.ele.me" target="_blank">订单管理</a></el-menu-item> </el-menu> </div> </body> <script> new Vue({ el:"#div", data() { return { activeIndex: '1', activeIndex2: '1' }; }, methods: { handleSelect(key, keyPath) { console.log(key, keyPath); } } }) </script> </html> 侧边导航栏 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>侧边导航栏</title> <link rel="stylesheet" href="../element-ui/lib/theme-chalk/index.css"> <script src="../js2/vue.js"></script> <script src="../element-ui/lib/index.js"></script> </head> <body> <div id="div"> <el-row class="tac"> <el-col :span="3"> <h5>自定义颜色</h5> <el-menu default-active="2" class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b"> <el-submenu index="1"> <template slot="title"> <i class="el-icon-location"></i> <span>导航一</span> </template> <el-menu-item-group> <template slot="title">分组一</template> <el-menu-item index="1-1">选项1</el-menu-item> <el-menu-item index="1-2">选项2</el-menu-item> </el-menu-item-group> <el-menu-item-group title="分组2"> <el-menu-item index="1-3">选项3</el-menu-item> </el-menu-item-group> <el-submenu index="1-4"> <template slot="title">选项4</template> <el-menu-item index="1-4-1">选项1</el-menu-item> </el-submenu> </el-submenu> <el-menu-item index="2"> <i class="el-icon-menu"></i> <span slot="title">导航二</span> </el-menu-item> <el-menu-item index="3" disabled> <i class="el-icon-document"></i> <span slot="title">导航三</span> </el-menu-item> <el-menu-item index="4"> <i class="el-icon-setting"></i> <span slot="title">导航四</span> </el-menu-item> </el-menu> </el-col> </el-row> </div> </body> <script> new Vue({ el:"#div", methods: { handleOpen(key, keyPath) { console.log(key, keyPath); }, handleClose(key, keyPath) { console.log(key, keyPath); } } }) </script> </html>

December 30, 2021&nbsp;·&nbsp;6 分钟&nbsp;·&nbsp;Lizicai