01-demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script> </head> <body> <div id="app"> {{name}} </div> <script> // let ele = document.getElementById("app"); // ele.innerText = "hello"; const app = new Vue({ el: "#app", data: { name: "alex" } }) </script> </body> </html>
02-v-text以及v-html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script> </head> <body> <div id="app"> <h2 v-text="name"></h2> <h3 v-text="age"></h3> <h3>他的爱好是</h3> <div v-html="hobby"> </div> </div> <script> // 先获取h2标签 // innerText // innerHtml const app = new Vue({ el: "#app", data: { name: "夏雨豪", age: 18, hobby: `<ul> <li>学习</li> <li>舔狗</li> <li>吸猫</li> </ul>` } }) </script> </body> </html>
03-v-for
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script> </head> <body> <div id="app"> <ul> <li v-for="(course, index) in course_list" :key="index">{{course}}{{index}}</li> </ul> <ul> <li v-for="(stu, index) in s1">{{stu.name}}{{stu.age}}</li> </ul> </div> <script> const app = new Vue({ el: "#app", data: { course_list: ["Python", "Linux", "Vue", "Go"], s1: [ { name: "袁承明", age: 19 }, { name: "李沁洋", age: 20 } ] } }) </script> </body> </html>
04-v-bind
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script> <style> .my_active { 200px; height: 200px; border: 1px solid red; } </style> </head> <body> <div id="app"> <div v-bind:class="{my_active: is_show}"> </div> <img :src="my_src" alt=""> </div> <script> const app = new Vue({ el: "#app", data: { is_show: false, my_src: "https://hcdn1.luffycity.com/static/frontend/activity/banner-PC7%E5%A4%A9%20(1)_1542264332.6512344.png" } }) </script> </body> </html>
05-v-on
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script> </head> <body> <div id="app"> <button @click="my_click('打游戏')" v-on="{mouseenter: my_enter, mouseleave: my_leave}">点击弹出look</button> </div> <script> const app = new Vue({ el: "#app", data: { }, methods: { my_click: function (x) { alert("luke" + x) }, my_enter: function () { console.log("鼠标移入事件") }, my_leave: function () { console.log("鼠标移出事件") } } }) </script> </body> </html>
06-v-if
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script> </head> <body> <div id="app"> <div v-if="role == 'admin'">管理员你好</div> <div v-else-if="role == 'hr'">查看简历</div> <div v-else>没有权限</div> </div> <script> // appendChild const app = new Vue({ el: "#app", data: { role: "admin" } }) </script> </body> </html>
07-v-show
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script> </head> <body> <div id="app"> <div v-show="admin">管理员你好</div> <div v-show="hr">查看简历</div> <div v-show="others">没有权限</div> <button @click="my_click">点击显示或隐藏</button> <h2 v-show="is_show">吴栋</h2> </div> <script> // display const app = new Vue({ el: "#app", data: { admin: true, hr: false, others: false, is_show: false }, methods: { my_click: function () { this.is_show = !this.is_show } } }) </script> </body> </html>
08-v-mode以及指令修饰符
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script> </head> <body> <div id="app"> <input type="text" v-model.lazy.trim="username"> {{username}} <pre>{{username}}</pre> <hr> <input type="text" v-model.lazy.number="phone"> {{phone}} {{typeof phone}} <textarea name="" id="" cols="30" rows="10" v-model="article"></textarea> {{article}} <select name="" id="" v-model="choices" multiple> <option value="1">xiayuhao</option> <option value="2">yaunchengming</option> <option value="3">liqinyang</option> </select> {{choices}} </div> <script> const app = new Vue({ el: "#app", data: { username: "", article: "", choices: ["1"], phone: "" } }) </script> </body> </html>
09-自定义指令
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script> <style> .my_box { 200px; height: 200px; border: 1px solid red; } </style> </head> <body> <div id="app"> <div class="my_box" v-pin.left.bottom="pinned"> </div> <h1 v-my_text="name"></h1> </div> <script> Vue.directive("pin", function (el, binding) { console.log(el); // el 是我们绑定指令的标签元素 console.log(binding); // binding 指令的所有信息 let gps = binding.modifiers; // {right: true, top: true} if(binding.value){ // 给div定位到浏览器的右下角 el.style.position = "fixed"; // el.style.right = 0; // el.style.bottom = 0; for(let posi in gps){ el.style[posi] = 0; } } else { el.style.position = "static"; } }); // 自定义的v-text Vue.directive("my_text", function (el, binding) { el.innerText = binding.value; }); const app = new Vue({ el: "#app", data: { pinned: true, name: "gaoxin" } }) </script> </body> </html>
01-获取DOM
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script> </head> <body> <div id="app"> <div ref="my_box"></div> <button v-on:click="my_click">点击显示文本</button> </div> <script> const app = new Vue({ el: "#app", methods: { my_click: function () { // 给div标签加入文本 let ele = this.$refs.my_box; console.log(ele) ele.innerText = "夏雨豪" } } }) </script> </body> </html>
02-计算属性
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script> </head> <body> <div id="app"> <table> <thead> <tr> <th>科目</th> <th>成绩</th> </tr> </thead> <tbody> <tr> <td>Python</td> <td><input type="text" v-model.number="python"></td> </tr> <tr> <td>Django</td> <td><input type="text" v-model.number="django"></td> </tr> <tr> <td>Mysql</td> <td><input type="text" v-model.number="mysql"></td> </tr> <tr> <td>总分</td> <td>{{total}}</td> </tr> <tr> <td>平均分</td> <!--<td>{{(python+django+mysql)/3}}</td>--> <td>{{average}}</td> </tr> </tbody> </table> {{sum}} </div> <script> const app = new Vue({ el: "#app", data: { python: "", django: "", mysql: "", sum: this.python + this.django + this.mysql, // sum: null }, methods: { }, computed: { total: function () { return this.python + this.django + this.mysql }, average: function () { return this.total/3 } } }) </script> </body> </html>
03-数据的监听
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script> </head> <body> <div id="app"> {{name}} <br> {{hobby}} <br> {{obj}} <br> <button @click="my_click">点我改变数据</button> </div> <script> const app = new Vue({ el: "#app", data: { name: "夏雨豪", hobby: ["舔狗", "烫头"], obj: { girl: "李文周", age: 36 } }, methods: { my_click: function () { // 修改数据 // this.name = "夏雨荷"; // this.hobby.push("腹黑") // this.hobby[0] = "吸猫"; // console.log(this.hobby) // app.$set(this.hobby, 0, "吸猫") // this.obj.age = 18; // this.obj["sex"] = "女"; app.$set(this.obj, "sex", "女") } }, watch: { name: { handler: function (val, oldVal) { console.log(val); console.log(oldVal); // 可以通知乾隆~~ } }, hobby: { handler: function (val, oldVal) { // 改变数组的长度的时候新旧值相同 console.log(val); console.log(oldVal); }, // deep: true }, obj: { handler: function (val, oldVal) { console.log(val); console.log(oldVal); }, // deep: true } } }) </script> </body> </html>
总结:
前端内容回顾 HTML 超文本标记语言 帮助我们构建页面结构 CSS 层叠样式表 给我们的页面结构渲染样式 JS 脚本语言 用于用户的交互 JQuery 对js语法的封装 Bootstrap 封装样式 Vue的简介 借鉴后端的MVC架构模式 是MVVM架构 Model View ViewModel 主要思想是数据驱动视图 从获取DOM渲染DOM的操作中解脱出来 Vue的常用指令 -- v-text innerText -- v-html innerHtml -- v-for -- v-if v-else-if v-else appendChild -- v-show display -- v-bind 绑定属性 简写: -- v-on 绑定事件 简写@ -- v-model 数据的双向绑定 -- input -- textarea -- select -- 指令修饰符 -- .lazy -- .number -- .trim -- 自定义的指令 -- Vue.dirctive("指令名称", function(el, binding){ el 绑定指令的标签元素 binding 指令的所有信息组成的对象 value 指令绑定数据的值 modifiers 指令修饰符 })
获取DOM -- 给标签加ref属性 ref="xxxx" -- this.$refs.xxxx 计算属性 computed 放入缓存 当数据改变的时候才会重新执行计算 跟data中数据的区别 数据的监听 -- watch去监听 -- 字符串 -- 监听到改变新的值和旧的值不同的 -- 数组 -- 只能监听到长度的变化 新旧值相同的 -- 改变数组值的时候监听不到 必须用$set(array, index, value) 新旧值相同的 -- 对象 -- 只能监听到value的改变 必须深度监听 -- 增加对象的key 必须用$set(obj, key, value) -- 新旧值相同的