为方便Vue调试,F12看对象和变量信息,请先安装Edge浏览器,和谷歌浏览器的调试插件
然后在顶层找到 生态系统->工具链指南->浏览器开发着插件
在里面下载安装插件:Vue.js devtools
Edge可以直接安装插件,谷歌浏览器可以科学上网安装插件,安装完毕后打开是vue编写的页面就按F12然后找到 》然后点开Vue 就可以针对页面的Vue变量进行调试查看。(如果是vue编写的页面,Vue插件图标会亮,不是则不亮的)
点开Vue后就会看到如下界面

以下是代码
- html>
- <htmI lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible” content=" IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- <script src="https://unpkg.com/vue@3/dist/vue.global.js">script>
- head>
-
- <body>
- <div>
- {{10+20}} 这一个运算不起作用,页面展示的就是一个{{10+20}}字符串,因为它不在Vue作用容器内
- div>
- <div id="box">
- {{10+20}}
- {{myname}}
- {{GetString()}}
- div>
- <script>
- //Vue.createApp方法创建一个vue实例,然后用mount方法将应用实例挂载在一个id为box的容器元素中。
- //那么id=box的容器就使用了vue模版引擎进行渲染
- //Vue.createApp().mount("#box")
-
- Vue.createApp({
- data() {
- return {
- myname: "凡凡"
- }
- },
- methods: {
- GetString() {
- return "abc";
- }
- }
-
- }).mount("#box")
- script>
- body>
- htmI>
- html>
- <htmI lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible” content=" IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- <script src="https://unpkg.com/vue@3/dist/vue.global.js">script>
- head>
- <body>
- <div id="app">
-
- <div>{{10+20}}div>
- <div>{{myname}}div>
- <div>{{myname.slice(0,1)}}div>
- <div>{{myname+"-欢迎您"}}div>
- <div>{{isLogin?"已登陆":"未登录"}}div>
- <script>
- var app = Vue.createApp({
- data() {
- return {
- myname: "凡凡",
- isLogin:true
- }
- }
-
- }).mount("#app")
- script>
- div>
- body>
- htmI>
- html>
- <htmI lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible” content=" IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- <script src="https://unpkg.com/vue@3/dist/vue.global.js">script>
- <style>
- .yellow{
- background-color: yellow;
- }
- .red{
- background-color: red;
- }
- .hidden{
- display: none;
- }
- .show{
- display: block;
- }
- .aaa{
- background-color:aqua;
- }
- .bbb{
- font-size: 8px;
- }
- .ccc{
- color:blue;
-
- }
- style>
- head>
- <body>
- <div id="app">
-
- <div v-bind:class="color">{{myname}}div>
- <div v-bind:class="isLogin?'red':'yellow'">登录状态div>
- <div v-bind:class="isShow?'show':'hidden'">哈哈div>
-
-
-
-
-
- <div v-bind:class="{aaa:true,bbb:false,ccc:true}">中华人民共和国Adiv>
-
-
- <div v-bind:class="classObj">中华人民共和国Bdiv>
-
-
-
- <div v-bind:class="['aaa','ccc']">中华人民共和国Cdiv>
-
-
-
-
- <div v-bind:class="classArr">中华人民共和国Cdiv>
-
- <img v-bind:src="url" width="120" height="33"><br>
- <img v-bind="imgObj"><br>
-
-
-
-
-
- <div v-bind:style="{backgroundColor:'red'}">中华人民共和国Ddiv>
- <div v-bind:style="{backgroundColor: color}">中华人民共和国Ediv>
- <div v-bind:style="{backgroundColor:'red',fontSize:'20px'}">中华人民共和国Fdiv>
-
-
-
- <div v-bind:style="styleObj">中华人民共和国Mdiv>
-
-
- <div v-bind:style="[{backgroundColor:'red'},{fontSize:'20px'}]">中华人民共和国Kdiv>
-
- <div v-bind:style="styleArr" v-on:click="GetGroundImage">中华人民共和国Ldiv>
-
-
- <button disabled="disabled">clicibutton>
- <button disabled="true">clicibutton>
- <button disabled="false">clicibutton>
- <button v-bind:disabled="state">clicibutton>
- <script>
- var app = Vue.createApp({
- data() {
- return {
- myname: "凡凡",
- isLogin:true,
- isShow:false,
- color:"yellow",
- url:"http://sc0.hao123img.com/res/r/image/2017-09-27/297f5edb1e984613083a2d3cc0c5bb36.png",
- imgObj:{
- src:"http://sc0.hao123img.com/res/r/image/2017-09-27/297f5edb1e984613083a2d3cc0c5bb36.png",
- Width:120,
- Height:33
- },
- classObj:{
- aaa:true,
- bbb:false,
- ccc:true
- },
- styleObj:{
- backgroundColor:'red', //也可以写成这样:'background-color':'red',(注意带-的名称需要用''包裹起来)
- fontSize:'20px', //也可以写成这样:'font-size':'200px'
-
- //很多时候这个背景图片是通过Ajax方法从后台获取,然后动态给styleObj对象增加这个backgroundImage属性然后赋值的
- backgroundImage:"url(http://sc0.hao123img.com/res/r/image/2017-09-27/297f5edb1e984613083a2d3cc0c5bb36.png)" //也可以写成这样:'background-image':'200px'
- },
- classArr:["aaa","ccc","bbb"],
- styleArr:[{backgroundColor:'red'},{fontSize:'20px'}],
- state:false
- }
- },
- methods:{
- GetGroundImage(){
- this.styleArr.push({backgroundImage:"url(http://sc0.hao123img.com/res/r/image/2017-09-27/297f5edb1e984613083a2d3cc0c5bb36.png)"}) //动态的添加一个背景图片
- this,styleArr.push({fontSize:'50px'}) //因为styleArr里面本来就存在{fontSize:'20px'}这个对象了,此时我们push大片styleArr后,最新的值就会覆盖掉原来的值,所以原来的{fontSize:'20px'}就变成了{fontSize:'50px'}
- }
- }
-
- }).mount("#app")
- script>
- div>
- body>
- htmI>
- html>
- <htmI lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible” content=" IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- <script src="https://unpkg.com/vue@3/dist/vue.global.js">script>
- <style>
- .hidden{
- display: none;
- }
- .show{
- display: block;
- }
- style>
- head>
- <body>
- <div id="app">
-
- <div v-bind:class="isShow?'show':'hidden'">哈哈div>
-
-
- <div v-show="isShow">显示或者隐藏div>
- <div v-if="isShow">显示或者隐藏div>
-
- <div v-show="dataList.length===0">暂无数据div>
- <div v-if="dataList.length===0">暂无数据div>
-
-
- <ul v-for="item in commodityList">
- <li>{{item.title}}
- <b v-if="item.state===0">未付款b>
- <b v-else-if="item.state===1">已付款b>
- <b v-else-if="item.state===2">已完成b>
- <b v-else>未知b>
- li>
- ul>
- <script>
- var app = Vue.createApp({
- data() {
- return {
- myname: "凡凡",
- isShow:false,
- dataList:["AA","BB","CC"],
- commodityList:[
- {title:'手机',state:0},
- {title:'衣服',state:1},
- {title:'鞋子',state:2},
- ]
- }
- }
-
- }).mount("#app")
- script>
- div>
- body>
- htmI>
- html>
- <htmI lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible” content=" IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- <script src="https://unpkg.com/vue@3/dist/vue.global.js">script>
- <style>
- .liColor {
- background-color: brown;
- }
- style>
- head>
-
- <body>
- <div id="app">
- <ul>
-
- <li v-for="item in dataList">值:{{item}}--索引:{{index}}li>
- ul>
-
- <ul>
-
- <li v-for="item,index in dataList" v-bind:class="currentClickIndex===index?'liColor':''"
- v-on:click="ChangeColor(index)">值:{{item}}--索引:{{index}}li>
- ul>
-
- <ul>
-
- <li v-for="(item,index) in dataList" v-bind:class="currentClickIndex===index?'liColor':''"
- v-on:click="ChangeColor(index)">值:{{item}}--索引:{{index}}li>
- ul>
-
-
-
- <ul v-for="({title,state},index) in commodityList">
- {{title}}
- <li v-if="state===0">未付款li>
- <li v-else-if="state===1">已付款li>
- <li v-else-if="state===2">已完成li>
- <li v-else>未知li>
- ul>
-
- <ul>
- <li v-for="({title,state},index) in commodityList">{{title}}
- <div v-if="state===0">未付款div>
- <div v-else-if="state===1">已付款div>
- <div v-else-if="state===2">已完成div>
- <div v-else>未知li>
- ul>
-
-
- <ul>
-
- <li v-for="value in userObj">值是:{{value}}li>
- ul>
- <ul>
-
- <li v-for="(value,key) in userObj">键是:{{key}} --值是:{{value}}li>
- ul>
-
- <ul>
-
- <li v-for="(value,key,index) in userObj">键是:{{key}} --值是:{{value}}--索引是:{{index}}li>
- ul>
-
-
-
- <ul>
-
- <li v-for="value of userObj">值是:{{value}}li>
- ul>
- <ul>
-
- <li v-for="(value,key) of userObj">键是:{{key}} --值是:{{value}}li>
- ul>
-
- <ul>
-
- <li v-for="(value,key,index) of userObj">键是:{{key}} --值是:{{value}}--索引是:{{index}}li>
- ul>
-
-
- <ul>
-
- <li v-for="item in 5">值是:{{item}}li>
- ul>
-
-
-
- <input type="text" v-model="inputval"/>
- <ul>
- <template v-for="item in GetSelectItems()">
- <li>{{item}}li>
- template>
- ul>
-
-
- <script>
- var app = Vue.createApp({
- data() {
- return {
- dataList: ["AA", "BB", "CC"],
- currentClickIndex: -1, //当前点击li的索引标记,初始值为-1的因为页面刚刚渲染出来肯定是没有被点击的,所以不可能存在背景色位红色的li
- commodityList:[
- {title:'手机',state:0},
- {title:'衣服',state:1},
- {title:'鞋子',state:2},
- ],
- userObj:{
- name:'张三',
- age:23,
- email:'abc123@qq.com'
- },
- inputval:'',
- charArr:["aaa",'abc','abd','bca']
-
- }
- },
- methods: {
- ChangeColor(index) {
- this.currentClickIndex = index; //将当前点击的li的索引赋值给currentClickIndex
- },
- GetSelectItems(){
- //includes() 方法用于判断字符串是否包含指定的子字符串
- //filter方法是过滤方法, item表示当前遍历charArr数组的项,如果当前项包含了input中输入的值,则找出来,然后统一返回一个数组
- var selectIitemArr= this.charArr.filter(item=>item.includes(this.inputval))
- return selectIitemArr;
- }
-
- }
-
- }).mount("#app")
- script>
- div>
- body>
- htmI>
- html>
- <htmI lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible” content=" IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- <script src="https://unpkg.com/vue@3/dist/vue.global.js">script>
- head>
-
- <body>
- <div id="app">
-
- <div v-if="isShow">
- <div>111div>
- <div>222div>
- <div>333div>
- div>
-
- <div>
- <div>111div>
- <div>222div>
- <div>333div>
- div>
-
- <template v-if="isShow">
- <div>111div>
- <div>222div>
- <div>333div>
- template>
-
- <div>111div>
- <div>222div>
- <div>333div>
-
-
- <ul>
- <template v-for="item in commodityList">
- <li v-if="item.state<2">{{item.title}}li>
- template>
- ul>
-
- <ul>
- <template v-for="({title,state},index) in commodityList">
- <li v-if="state<2">{{title}}li>
- template>
- ul>
-
- <script>
- var app = Vue.createApp({
- data() {
- return {
- isShow: true,
- commodityList:[
- {title:'手机',state:0},
- {title:'衣服',state:1},
- {title:'鞋子',state:2},
- ],
- }
- }
-
- }).mount("#app")
- script>
- div>
- body>
- htmI>
- html>
- <htmI lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible” content=" IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- <script src="https://unpkg.com/vue@3/dist/vue.global.js">script>
- <style>
- .liColor {
- background-color: brown;
- }
- style>
- head>
-
- <body>
- <div id="app">
- {{count}}
- {{myname}}
-
- <button v-on:click="count++">增加1button>
- <button v-on:click="count--">减少1button>
-
- <button v-on:click="GetInfo()">clickbutton>
- <button v-on:click="GetInfo">clickbutton>
-
-
-
-
-
-
-
-
-
-
- <input v-on:input="GetEventA" id="5">clickAbutton>
-
-
- <input v-on:input="GetEventB()" id="6">clickBbutton>
- <input v-on:input="GetEventC(7)" id="7">clickCbutton>
-
-
- <input v-on:input="GetEventD(7,$event)" id="7">clickDbutton>
-
-
-
- <ul>
- <li v-for="item,index in dataList" v-bind:class="currentClickIndex===index?'liColor':''"
- v-on:click="ChangeColor(index)">值:{{item}}--索引:{{index}}li>
- ul>
-
- <script>
- var app = Vue.createApp({
- data() {
- return {
- count:0,
- myname: "凡凡",
- isShow: false,
- dataList: ["AA", "BB", "CC"],
- currentClickIndex: -1 //当前点击li的索引标记,初始值为-1的因为页面刚刚渲染出来肯定是没有被点击的,所以不可能存在背景色位红色的li
- }
- },
- methods: {
- GetInfo() {
- alert(1);
- console.log("这个this其实就是app对象", this)
- this.myname = "赵云" //点击button控件的时候就将myname赋值为赵云了
- },
- GetEventA(evt) {
- // alert(2);
- console.log(evt); //调用这个方法如果不传递参数,默认就自带了一个元素的原生事件evt,有了一个元素的原生事件对象我们就可以从这个对象中获取到我们需要元素数据了。
- console.log(evt.target.value); //在输入框内容发生变化后打印出:当前输入框中录入的值。
- console.log(evt.target.id); //在输入框内容发生变化后打印出:这个元素的id属性值
- this.myname = evt.target.value;
- },
- GetEventB(evt) {
- console.log(evt.target.id); //错误用法:因为调用方法是带括号的,但是在调用的时候没用传递参数,所以这里无法收到元素原生事件对象的,所以就无法获取到id值
- },
- GetEventC(id) {
- console.log(id); //方法传递了7的值,所以就可以打印出7
- },
- GetEventD(a,evt) {
- console.log(a);
- console.log(evt.target.id);
- },
-
- ChangeColor(index) {
- this.currentClickIndex = index; //将当前点击的li的索引赋值给currentClickIndex
- }
-
- }
-
- }).mount("#app")
- script>
- div>
- body>
- htmI>
- html>
- <htmI lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible” content=" IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- <script src="https://unpkg.com/vue@3/dist/vue.global.js">script>
- head>
-
- <body>
- <div id="app">
- {{myContent}}
- <div v-html="myContent">div>
- <script>
- var app = Vue.createApp({
- data() {
- return {
- myContent: "这是我的内容"
- }
- },
- methods: {
- }
-
- }).mount("#app")
- script>
- div>
- body>
- htmI>

v-bind和oninput事件。
value 属性和 input 事件checked 属性和 change 事件value 作为 prop 并将 change 作为事件- html>
- <htmI lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible” content=" IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- <script src="https://unpkg.com/vue@3/dist/vue.global.js">script>
- <style>
- .liColor {
- background-color: brown;
- }
- style>
- head>
-
- <body>
- <div id="app">
-
-
-
- <input type="text" v-model="name">
-
-
-
- <div>您选择的爱好是:{{love}}div>
- <input type="radio" v-model="love" value="篮球">篮球
- <input type="radio" v-model="love" value="足球">足球
- <input type="radio" v-model="love" value="跑步">跑步
-
-
- <div>您选择的爱好是:{{loveList}}div>
- <input type="checkbox" v-model="loveList" value="篮球">篮球
- <input type="checkbox" v-model="loveList" value="足球">足球
- <input type="checkbox" v-model="loveList" value="跑步">跑步
-
-
- <div>您选择的爱好是:{{loveInt}}div>
- <select v-model="loveInt">
- <option value="1">篮球option>
- <option value="2">足球option>
- <option value="3">跑步option>
- select>
-
- <script>
- var app = Vue.createApp({
- data() {
- return {
- name: '张三',
- love: '', //单选框选择的数据会保存在这里
- loveInt:0, //下拉框选择的数据会保存在这里
- loveList: [],//复选框选择的数据会保存在这里
- }
- },
- methods: {
-
-
- }
-
-
- }).mount("#app")
- script>
- div>
- body>
- htmI>
- html>
- <htmI lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible” content=" IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- <script src="https://unpkg.com/vue@3/dist/vue.global.js">script>
- <style>
- li {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 10px;
- border: 1px solid lightgray;
-
- }
-
- li img {
- width: 100px;
- }
- style>
- head>
-
- <body>
- <div id="app">
- {{checkList}}
- <ul>
- <li>
- <div>
- <input type="checkbox" name="" id="" v-model="isCheckAll" v-on:change="OnIsCheckAll">
- <span>全选span>
- div>
- li>
- <li v-for="(item,index) in dataList" :key="item.id">
- <div>
-
- <input type="checkbox" v-model="checkList" v-bind:value="item" v-on:change="OnCheckAll">
- div>
- <div>
- <img v-bind:src="item.imageUrl" v-bind:alt="item.title">
- div>
- <div>
- <div>{{item.title}}div>
- <div style="color: rebeccapurple;">价格:{{item.price}}div>
- div>
- <div>
-
- <button v-on:click="item.number--" v-bind:disabled="item.number<=0">-button>
- {{item.number}}
-
- <button v-on:click="item.number++" v-bind:disabled="item.number>item.count-1">+button>
- div>
- <div>
- <button v-on:click="OnDelete(index,item.id)">删除button>
- div>
- li>
- <li>
- <div>总金额:{{computeTotalAmount}}¥div>
- li>
- ul>
-
-
- <script>
- var app = Vue.createApp({
- data() {
- return {
- isCheckAll: false,
-
- checkList: [], //选中的项
- dataList: [
- {
- id: 1,
- title: '坚如磐石', //名称
- price: 38, //价格
- number: 1, //用户选择的具体数量,默认为1
- imageUrl: 'https://pic.maizuo.com/usr/movie/6c850bf378a1d79fcb5b82664c5257f7.jpg?x-oss-process=image/quality,Q_70',
- count: 5 //数据库里该商品的总量
- },
- {
- id: 2,
- title: '莫斯科行动',
- price: 32,
- number: 1,
- imageUrl: 'https://pic.maizuo.com/usr/movie/a90d7cf8358aac885155f4d99c9b965f.jpg?x-oss-process=image/quality,Q_70',
- count: 5
- },
- {
- id: 3,
- title: '雄兵出击',
- price: 42,
- number: 1,
- imageUrl: 'https://pic.maizuo.com/usr/movie/82ebba150cec3b28261a1adb01c50def.jpg?x-oss-process=image/quality,Q_70',
- count: 5
- }
- , {
- id: 4,
- title: '最好的相遇',
- price: 35,
- number: 1,
- imageUrl: 'https://pic.maizuo.com/usr/movie/22607711b22cfbf65592a336fce6106f.jpg?x-oss-process=image/quality,Q_70',
- count: 5
- },
- {
- id: 5,
- title: '疯狂大营救',
- price: 25,
- number: 1,
- imageUrl: 'https://pic.maizuo.com/usr/movie/a69819cccb78f249aa6409b0785707c4.jpg?x-oss-process=image/quality,Q_70',
- count: 5
- }
-
-
- ]
- }
- },
- //computed与methods的不同就是methods没有缓存,而computed会有缓存,如果计算的值不发生变化,第二次用到这个方法就直接从缓存中拿,就不需要再计算一次了。提高性能
- //computed 应该值做计算而没有任何其他的副作用的事,这点非常重要,请务必牢记。举列来说就是不要在计算属性中做异步请求,或者更改DOM的事情。
- computed: { //computed与methods的不同就是methods没有缓存,而computed会有缓存,如果计算的值不发生变化,第二次用到这个方法就直接从缓存中拿,就不需要再计算一次了。提高性能
- computeTotalAmount() { //计算总金额
-
- //传统计算方式
- // var total=0;
- // for(var i=0;i
- // {
- // total+=this.checkList[i].number*this.checkList[i].price;
- // }
- // return total;
-
- //采用js原生的一个函数来计算:reduce可以给我们做数组累加累陈等操作计算
- var total = this.checkList.reduce((total, item) => total + item.number * item.price, 0);
- return total;
- }
- },
-
- methods: {
- OnDelete(index, id) { //index的作用是用于计算删除第几个。
- this.dataList.splice(index, 1);
- //同步更新checkList
- this.checkList = this.checkList.filter((item) => item.id != id) //既然当前id已经被删除,所以原先被选中的要排除当前id的项
-
- },
- OnIsCheckAll() {
- alert(1);
- if (this.isCheckAll) {
- this.checkList = this.dataList;
- } else {
- this.checkList = [];
- }
- },
- OnCheckAll() {
- if (this.checkList.length === this.dataList.length) {
- this.isCheckAll = true;
- } else {
- this.isCheckAll = false;
- }
-
- }
-
- }
-
-
- }).mount("#app")
- script>
- div>
- body>
- htmI>
