vue学习笔记

125 阅读1分钟

vue.js学习笔记

1.引入vue.js

<!-- 开发环境版本,包含了有帮助的命令行警告 2.0-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

2.vue模版

<!DOCTYPE html>
<html 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>Document</title>
 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>

  <div id="app">
  </div>
   
  <script> 
  //实例化vue
    new Vue({
      //挂载目标
      el: '#app', 
      //父组件数据对象
      data: {
      },
      //钩子函数 页面一加载就调用
      created(){
      },
      //注册子组件
      
      // 显示设置模板  
      template: `<div></div>`
    })
  </script>
</body>

</html>

3.vue-插值表达式

插值表达式: 小胡子语法 {{}}

缺点:会存在页面闪烁
  解决方案:
    1. 给指定的元素添加v-cloak指令并设置隐藏样式 display: none 
    2. 当vue引入成功之后,会自动的删除v-cloak,同时数据也解析完毕  
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    [v-cloak] {
      display: none
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>
  <div id="app">
    <h1 v-cloak> {{msg}}</h1>
    <!-- v-text 原样输出,不会解析html,即文本text输出-->
    <h1 v-text="msg1"></h1>
    <!-- v-html 会解析 html 再输出 -->
    <h1 v-html="msg1"></h1>
  </div>
  <script>
    new Vue({
      el: "#app",
      data: {
        msg: '第一次使用vue',
        msg1: '<mark>第一次使用vue</mark>'
      }
    })
  </script>
</body>

</html>

4.vue-属性绑定

1.对象-数组 写法

<div v-bind:class="">等同于<div :class="">(缩写)

1.对象写法

<div :class="{active:isflag,red:noflag}">你好</div>    结果为:<div class="active>你好</div>

2.数组写法

<div :class="[isflag?'active':'',noflag?'red':'']">你好</div>    结果为:<div class="active>你好</div>

组件

data: {
  isflag: true,
  noflag:false,
  
}

2.双向传值

<div id="app">
 {{msg}}
 <!-- 双向数据绑定手动模拟 -->
 <input type="text" :value="msg" @input="getValue">
 
 <!-- v-model只能使用在表单和组件上 -->
 <!-- <input type="text" v-model="msg"> -->
 <!-- <button @click="getValue">getValue</button> -->
</div>
<script>
 new Vue({
   el: "#app",
   data: {
     msg: 'hello vue',
   },
   methods: {
     getValue(e) {
       // console.log(this.msg)
       // console.log(e.target.value)
       this.msg = e.target.value
     }
   }
 })

 // vue里面的数据流    
 // 单向数据绑定: model改变,view跟着改变,不能反过来
 // 双向数据绑定: model改变,view跟着改变,反之亦然

5.事件绑定

<button v-on:click="">等同于<button @click="">(缩写)

<div id="app">
    <button @click="click(1)"></button>
</div>
new Vue({
      el: "#app",
      data: {
      },
      methods: {
          click(e) {
          console.log('e')
        }
      }
    })

点击按钮,控制台打印 1

事件修饰符

1.点击修饰符

    stop   防止事件冒泡,点击后只触发子节点.

    prevent 取消默认事件
         比如页面的<a href="#">标签,当用户点击时,通常在浏览器的网址列出#:
    
    .capture  触发从外至内  触发父节点-->子节点的点击事件

    once  只触发一次 
    
    .self  只会触发自己范围内的事件,不会包含子元素。

2.鼠标修饰符

   .left:鼠标左键
   .middle:鼠标中间滚轮
   .right:鼠标右键
   

3.键盘修饰符

    .enter:回车键
    .tab:制表键
    .delete:含delete和backspace键
    .esc:返回键
    .space: 空格键
    .up:向上键
    .down:向下键
    .left:向左键
    .right:向右键
<div id="app">
    <button @keyup.enter="enter"></button>
</div>

6.钩子函数

image.png

7.v-for,v-if,v-show

1.v-if和v-show

 1. v-show 和 v-if的区别  
     v-show 是通过控制元素的样式 进行显示隐藏  
     v-if 是通过js操作DOM的添加和删除 
 2. 使用场景
     如果频繁操作 建议使用v-show 
     如果做流程控制建议使用 v-if  
     

2.v-for

<div id="app">



  <h2>遍历数组</h2>
  <p v-for="(item,index) in arr">
    值为: {{item}} --- 索引为: {{index}}
  </p>
  
  
  <h2>遍历数组对象</h2>
  <p v-for="(item,index) in arrObj">
    id为:{{item.id}}---
    值为:{{item.name}} ---
    索引为: {{index}}
  </p>
  
  
  
  <h2>遍历对象</h2>
  <p v-for="(value,key,index) in obj">
    {{value}} --- {{key}} --- {{index}}
  </p>
  
  
  
  <h2>遍历数字-从1开始到指定的数值</h2>
  <p v-for="(count,index) in 8">
    {{count}} --- {{index}}
  </p>
</div>

<script>
  new Vue({
    el: "#app",
    data: {
      arr: ['张三', '李四', '王五'],
      arrObj: [
        {
          id: 0,
          name: '张三'
        },
        {
          id: 1,
          name: '李四'
        },
        {
          id: 2,
          name: '王五'
        }
      ],
      obj: {
        name: '张三',
        age: 18,
        sex: "男"
      }
    }
  })
</script>