VUE笔记(一)

1.VUE初始化

  <div id='app'>
   {{a}}
  </div>
  <script src='../vender/vue.min.js'></script>
  <script>
   import a from './hhh.js'
   const app = new Vue({
    el: '#app',
    data: {
     message: a
    }
   })
  </script>

2.v-bind使用

v-bind用于绑定数据和元素,v-bind可写成:

2.1v-bind基本使用

div部分

 <div id='app'>
  <img v-bind:src="imgUrl" alt="">
  <a v-bind:href="aHref">百度一下</a>
  <!--vue省略写法-->
  <img :src="imgUrl" alt="">
  <a :href="aHref">百度一下</a>
  <!--v-bind省略写法就是:-->
 </div>

script部分

<script src="../vender/vue.min.js"></script>
 <script>
  const app = new Vue({
   el: '#app',
   data: {
    message: '你好啊',
    imgUrl: 'http://a4.att.hudong.com/21/09/01200000026352136359091694357.jpg',
    aHref: 'http://www.baidu.com'
   }
  })
 </script>

2.2v-bind动态绑定class【对象写法】

 <div id='app'>
  <!--<h2 v-bind:class="{类名1:true,类名2:false,类名2:boolean}">{{message}}</h2>-->
  <h2 v-bind:class="{active:isActive,line:isLine}" class="title">{{message}}</h2>
  <h2 v-bind:class="getClasses()">{{message}}</h2>
  <!--v-on:等价为@-->
  <button type="button" v-on:click="btnClick">按钮</button>
  <button type="button" @click="btnClick">按钮</button>
 </div>
 <script src="../vender/vue.min.js"></script>
 <script>
  const app = new Vue({
   el: '#app',
   data: {
    message: '你好啊',
    isActive: true,
    isLine: true,
    active: 'active'
   },
   methods: {
    btnClick: function(){
     this.isActive = !this.isActive
    },
    getClasses: function(){
     return {active:this.isActive,line:this.isLine}
    }
   }
  })
 </script>

2.3v-bind动态绑定class【数组写法】

 <div id='app'>
  <!--加双引号表示字符串,去掉双引号表示变量,如下-->
  <h2 class="title" :class="[active,line,'active','line']">{{message}}</h2>
  <h2 class="title" :class="getClass()">{{message}}</h2>
 </div>
 <script src='../vender/vue.min.js'></script>
 <script>
  const app = new Vue({
   el: '#app',
   data: {
    message: '你好啊',
    active: 'aaaaa',
    line: 'bbbbb'
   },
   methods: {
    getClass: function(){
     return [this.active,this.line,'active','line']
    }
   }
  })
 </script>

3.计算属性computed

例1:

<div id='app'>
  <!--显示两名字,中间有一个空格-->
  <h2>{{firstName+' '+lastName}}</h2>
  <h2>{{firstName}} {{lastName}}</h2>
  <h2>{{getFullName()}}</h2>
  <!--计算属性(computed),直接写,不需要小括号-->
  <h2>{{fullName}}</h2>
 </div>
 <script src='../vender/vue.min.js'></script>
 <script>
  const app = new Vue({
   el: '#app',
   data: {
    firstName: 'aaaaa',
    lastName: 'bbbbb'
   },
   //计算属性(起名字尽量按属性起名字)
   computed: {
    fullName: function(){
     return this.firstName + ' ' + this.lastName
    }
   },
   methods: {
    getFullName: function(){
     return this.firstName + ' ' + this.lastName
    }
   }
  })
 </script>

例2:

 <div id='app'>
  <!--求书本总价格-->
  <h2>总价格:{{books[0].price+books[1].price+books[2].price+books[3].price}}</h2>
  <h2>总价格:{{TotalPrice}}</h2>
 </div>
 <script src='../vender/vue.min.js'></script>
 <script>
  const app = new Vue({
   el: '#app',
   data: {
    books: [
     {id:110, name: 'Unix', price:1},
     {id:111, name: 'Unix1', price:2},
     {id:112, name: 'Unix2', price:3},
     {id:113, name: 'Unix3', price:4}
    ]
   },
   //计算属性会进行缓存,如果多次使用时,计算属性只会调用一次,性能更高
   computed:{
    TotalPrice: function(){
     let result = 0
      for (let i=0;i<this.books.length;i++){
       result = result + this.books[i].price
      }
     return result
     /*es6语法
     1.  for(let i in this.books){}
     2.  for(let book of this.books)
     */
    }
   }})
 </script>

计算属性和methods的区别
例3:

 <div id='app'>
  <!--mustache拼接,一般不采用,语法过于繁琐-->
  <h2>{{firstName}} {{lastName}}</h2>
  <!--在多次使用时,getfullnane打印四次,fullname只打印一次,mentods只执行一次,性能更高-->
  <!--methods方法-->
  <h2>{{getfullName()}}</h2>
  <h2>{{getfullName()}}</h2>
  <h2>{{getfullName()}}</h2>
  <h2>{{getfullName()}}</h2>
  <!--computed属性-->
  <h2>{{fullName}}</h2>
  <h2>{{fullName}}</h2>
  <h2>{{fullName}}</h2>
  <h2>{{fullName}}</h2>
 </div> 
 <script src='../vender/vue.min.js'></script>
 <script>
  const app = new Vue({
   el: '#app',
   data: {
    firstName: 'aaaaa',
    lastName: 'bbbb'
   },
   computed: {
    fullName: function(){
     console.log('fullname')
     return this.firstName + ' ' + this.lastName
    }
   },
   methods: {
    getfullName: function(){
     console.log('getfullname')
     return this.firstName + ' ' + this.lastName
    }
   }
  })
 </script>

4.事件监听v-on

4.1v-on写法

v-on: 在某些时候可以使用简写@ 符号
例:

 <div id='app'>
  <h2>{{counter}}</h2>
  //写法1
  <button v-on:click="counter++">按钮+</button>
  <button v-on:click="counter--">按钮-</button>
  <br>
  //写法2
  <button v-on:click="increment()">按钮+</button>
  <button v-on:click="decrement()">按钮-</button>
  <br>
  //写法3
  <button @click="increment()">按钮+</button>
  <button @click="decrement()">按钮-</button>
  <br>
  //如果方法没有额外参数,且在事件监听的时候,方法后的()可以不添加
  <br>
  //即
  <br>
  //写法4
  <button v-on:click="increment">按钮+</button>
  <button v-on:click="decrement">按钮-</button>
 </div>
 <script src='../vender/vue.min.js'></script>
 <script>
  const app = new Vue({
   el: '#app',
   data: {
    counter:0
   },
   methods: {
    increment(){
     this.counter++
    },
    decrement(){
     this.counter--
    }
   }
  })
 </script>

4.2v-on修饰符

  • .stop
  • .prevent
  • .enter
  • .once
 <div id='app'>
  //1.  .stop修饰符的使用,阻止冒泡
  <div @click="divclick">
   aaaaaa
   <button @click.stop="btnclick">按钮</button>
  </div>
  <br>
  //2.  .prevent修饰符的使用
  <br>
  <form action="baidu">
   <input type="submit" value="提交" @click.prevent="submitclick"/>
  </form>
  <br>
  //3.  .监听某个按键键盘键的点击  .加上按键,例如:.enter
  <br>
  <input type="text" @keyup.enter="keyclick">
  <br><br>
  //4.  .once 只触发一次
  <br>
  <button @click.once="btn2click">按钮2</button>
 </div>
 
 <script src='../vender/vue.min.js'></script>
 <script>
  const app = new Vue({
   el: '#app',
   data: {
    message: '你好啊'
   },
   methods:{
    divclick(){
     console.log('divclick')
    },
    btnclick(){
     console.log('btnclick')
    },
    submitclick(){
     console.log('submitclick')
    },
    keyclick(){
     console.log('keyclick')
    },
    btn2click(){
     console.log('btn2click')
    }
   }
  })
 </script>

5.条件判断v-if,v-else

例1

 <div id='app'>
  <h2 v-if="isTrue">{{message}}</h2>
  <h1 v-else>{{messagetwo}}</h1>
 </div>
 <script src='../vender/vue.min.js'></script>
 <script>
  const app = new Vue({
   el: '#app',
   data: {
    message: '你好啊',
    messagetwo: 'dkjfalsjdfa',
    isTrue:true
   }
  })
 </script>

例2:用户登陆案例

 //加上key,切换类型之后输入框内的文本就会消失,<br>
 //key相同的时候内容不会消失,key不同就会消失<br><br><br>
 <div id='app'>
  <span v-if="isUserName">
   <label for="username">用户账号</label>
   <input type="text" placeholder="用户账号" id="username" key='a'>
  </span>
  <span v-else>
   <label for="emal">用户邮箱</label>
   <input type="text" placeholder="用户邮箱" id="emal" key='b'>
  </span>
  <button @click="isUserName = !isUserName">切换类型</button>
  <button @click="btn()">切换类型</button>
 </div>
 <script src='../vender/vue.min.js'></script>
 <script>
  const app = new Vue({
   el: '#app',
   data: {
    isUserName: true
   },
   methods:{
    btn(){
     this.isUserName = !this.isUserName;
     return isUserName;
    }
   }
  })
 </script>

6.条件判断v-show

 <div id='app'>
  <!--
  
  v-if  当条件为false时,包含v-if指令的元素根本就不会存在dom中,修改称true时候会重新创建一个
  v-show  当条件为false时,v-show只是给元素增加一个行内样式display:none,修改为true时只会修改行内样式重新显示,修改为display:block
  开发中的选择
  当需要在显示和隐藏之间切换频率特别高,使用v-show
  当只有一次切换时候,使用v-if
  
  -->
  <h2 v-if="isShow" id="aaa">{{message}}</h2>
  <h2 v-show="isShow" id="bbb">{{message}}</h2>
 </div>
 <script src='../vender/vue.min.js'></script>
 <script>
  const app = new Vue({
   el: '#app',
   data: {
    message: '你好啊',
    isShow: true
   }
  })
 </script>

7.循环遍历

使用v-for尽量绑定key,确保唯一性,达到性能应用

7.1v-for遍历数组

 <div id='app'>
  //在遍历过程中,没有使用索引值(下标值)
  <ul>
   <li v-for="item in names">{{item}}</li>
  </ul>
  //在遍历过程中,获取索引值
  <ul>
   <li v-for="(item,index) in names">{{(index+1)+'.'+item}}</li>
  </ul>
 </div>
 <script src='../vender/vue.min.js'></script>
 <script>
  const app = new Vue({
   el: '#app',
   data: {
    names:['654321','aaa','bbb','dddf','afdadf']
   }
  })
 </script>

7.2v-for遍历对象

 <div id='app'>
  //在遍历对象的过程中,如果只是获取一个值,那么获取到的是value
  <ul>
   <li v-for="item in info">{{item}}</li>
  </ul>
  //获取key和value,(value,key),如下,(a,b)中,a是value,b是key
  <ul>
   <li v-for="(a,b) in info">{{b+':'+a}}</li>
  </ul>
  //获取key,value,和index
  <ul>
   <li v-for="(value,key,index) in info">{{(index+1)+'-'+key+'-'+value}}</li>
  </ul>
  
 </div>
 <script src='../vender/vue.min.js'></script>
 <script>
  const app = new Vue({
   el: '#app',
   data: {
    info:{
     name:'啊啊啊',
     age:18,
     heigth:180
    }
   }
  })
 </script>

8.v-model

8.1v-model结合checkbox(单选框)

  <div id='app'>
   <!--单选框案例-->
   <label for="agree">
    <input type="checkbox" id="agree" v-model="isAgree">同意协议
   </label>
   <h2>您选择的是:{{isAgree}}</h2>
   <button :disabled="!isAgree">下一步</button>
  </div>
  <script src='../vender/vue.min.js'></script>
  <script>
   const app = new Vue({
    el: '#app',
    data: {
     isAgree: false
    }
   })
  </script>

8.2v-model结合checkbox(多选框)

  <div id='app'>
   <!--多选框案例-->
    <input type="checkbox" value="篮球" v-model="hobbies">篮球
    <input type="checkbox" value="足球" v-model="hobbies">足球
    <input type="checkbox" value="羽毛球" v-model="hobbies">羽毛球
    <input type="checkbox" value="台球" v-model="hobbies">台球
    
    <h2>{{hobbies}}</h2>
  </div>
  <script src='../vender/vue.min.js'></script>
  <script>
   const app = new Vue({
    el: '#app',
    data: {
     hobbies: []
    }
   })
  </script>

8.3v-model结合select(单选框)

  <div id='app'>
   <select name="abc" id="" v-model="fruit">
    <option value="苹果">苹果</option>
    <option value="香蕉">香蕉</option>
    <option value="橙子">橙子</option>
   </select>
   <h2>{{fruit}}</h2>
  </div>
  <script src='../vender/vue.min.js'></script>
  <script>
   const app = new Vue({
    el: '#app',
    data: {
     message: '你好啊',
     fruit :'香蕉'
    }
   })
  </script>

8.4v-model结合select(多选框)

  <div id='app'>
   <select name="abc" id="" v-model="fruit" multiple>
    <option value="苹果">苹果</option>
    <option value="香蕉">香蕉</option>
    <option value="橙子">橙子</option>
   </select>
   <h2>{{fruit}}</h2>
  </div>
  <script src='../vender/vue.min.js'></script>
  <script>
   const app = new Vue({
    el: '#app',
    data: {
     message: '你好啊',
     fruit :[]
    }
   })
  </script>

8.5v-model结合select(值绑定)

 <div id="app">
  <label v-for="item in allFruit" :for="item">
   <input type="checkbox" name="" :id="item" :value="item" v-model="fruit"/>{{item}}
  </label>
  <h2>你选择的是:{{fruit}}</h2>
 </div>
 <script src="../vender/vue.min.js"></script>
 <script>
  const app = new Vue({
   el:'#app',
   data: {
    allFruit: ['苹果','香蕉,','橙子','西瓜','猕猴桃,','火龙果'],
    fruit:[]
   }
  })
 </script>

8.6v-model修饰符

 <div id='app'>
  <!-- 1.修饰符:lazy -->
  <!-- text框失去焦点或者回车按下时候实现绑定 -->
  <input type="text" name="" id="" value="" v-model.lazy="message"/>
  <h2>{{message}}</h2>
  
  <!-- 2.修饰符:number -->
  <!-- 将类型转换成number类型 -->
  <input type="number" name="" id="" value="" v-model.number="age"/>
  <h2>{{age}}+{{typeof age}}</h2>
  
  <!-- 3.修饰符:trim -->
  <!-- 去除空格 -->
  <input type="text" name="" id="" value="" v-model.trim="name"/>
  <h2>您输入的名字是:{{name}}</h2>
 </div>
 <script src='../vender/vue.min.js'></script>
 <script>
  const app = new Vue({
   el: '#app',
   data: {
    message: '你好啊',
    age: '',
    name: ''
   }
  })
 </script>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值