02-Vue.js语法规范、转移和非转移输出、类名绑定、样式绑定、条件渲染、列表渲染、事件处理器、表单控件绑定

1、语法规范

  • 双大括号语法中,可以写{{this.__data.msg}}{{this.$data.msg}}{{this.msg}}{{msg}}
  • _ _和$都是内部私有属性的一种标识,不希望外用

2、模板语法:

  • mustache语法的大括号内支持写js

  • null和undefined不会显示,其他数据类型都可以正常显示

  • 挂载在window对象上的全局属性,如console、alert,都不能显示

  • {{ }}中不写流程控制语句,如for、while等

  • {{ }}支持三目运算、短路逻辑、运算符

  • 在标签的属性前使用v-指令,就能实现属性的属性值可以直接写js语法,并且属性值中的数据相当于全局变量

  • 数据想要操控DOM,就需要依赖指令,因为指令是直接绑定在dom上的

  • v-text 非转移输出,无法解析xml数据

  • v-html 转移输出,可以解析xml

  • v-bind 将数据和属性进行单向数据绑定(类名绑定、样式绑定),将vue中数据赋给属性值

  • 示例:
    <img v-bind:src = "src" />
    <div v-bind:class = ""></div>
    <div v-bind:style = ""></div>

  • 简写:
    <img :src="src" alt=""/>


3、类名绑定

new Vue({
    el: '#app',
    data: {
      classA: 'size',
      classB: 'bg'
    }
  })
  • 对象形式

        <p :class = "{ bg: true,size: false }"></p>         
        <p :class = "{ [classA]: true,[classB]: true }"></p>
    
  • 数组形式

        <p :class = "[ 'size','bg' ]"></p>               
        <p :class = "[ classA,classB ]"></p>             
        <p :class = "[ classA,classB,5>3?'a':'b']">  </p>
    

4、样式绑定

new Vue({
    el: '#app',
    data: {
      styleObj: {
        width: '100px',
        height: '100px',
        background: 'purple'
      },
      size: {
        width: '200px',
        height: '200px'
      },
      bg: {
        background: 'blue'
      }
    }
  })
  • 对象形式

        <p :style = "{width: '100px',height: '100px',background: 'yellow'}"></p>
        <p :style = "styleObj"></p>
    
  • 数组形式

        <p :style = "[{width:'100px',height: '100px'},{ background: 'green'}]"></p>
        <p :style = "[size,bg]"></p>
    

5、条件渲染

 new Vue({
    el: '#app',
    data: {
      flag: true,
      type: '美食',
      showFlag: true
    }
  })
  • 单路分支 v-if

    <p v-if = "flag"> A </p>
    
  • 双路分支 v-else

        <p v-if = "flag"> A </p>
        <p v-else > B </p>
    
  • 多路分支 v-else-if

    	<p v-if = "type === '美食'"> 美食 </p>
        <p v-else-if = " type === '游戏' "> 游戏 </p>
        <p v-else> 睡觉 </p>
    
  • 条件展示 v-show

    	<p v-show = " showFlag "> 条件展示 </p>
    
  • 总结v-show和v-if

    • 效果一样
    • v-if控制的是元素是否存在,v-show控制的是元素的display属性
    • 当初始条件为假时,v-show的性能损耗较高
    • 项目中,如果切换频繁,使用v-show,否则使用v-if

6、列表渲染

  • v-for指令
 new Vue({
    el: '#app',
    data: {
      arr: [1,2,3,4],
      obj: {
        id: 1,
        name: 'aaaa'
      },
      json: [
        {
          id: 1,
          shop_name: '商品一',
          price: 1000000000
        },
        {
          id: 2,
          shop_name: '商品二',
          price: 200000000000000
        }
      ],
      lists: [
        {
          id: 1,
          shop_name: '手机',
          type: [
            {
              id: 1,
              maker: '小米'
            },
            {
              id: 2,
              maker: '华为'
            }
          ]
        },
        {
          id: 2,
          shop_name: '笔记本电脑',
          type: [
            {
              id: 1,
              maker: '雷蛇'
            },
            {
              id: 2,
              maker: '苹果'
            },
            {
              id: 3,
              maker: '联想 ThinkPad'
            }
          ]
        }
      ]
    }
  })
  • 数组形式

    <ul>
        <li v-for = "(item,index) in arr" :key = " index ">
            {{ item }} -- index{{ index }}
        </li>
    </ul>
    
  • 对象形式

    <ul>
        <li v-for = "(item,key,index) of obj" :key = "index">
            {{ item }} -- {{ key }} -- {{ index }}
        </li>
    </ul>
    
    <ul>
        <li v-for = "item in json" :key = "item.id">
            <span> 商品名称: {{ item.shop_name }} </span>
            <span> 商品价格: {{ item.price }} </span>
        </li>
    </ul>
    
  • 循环嵌套

    <ul>
        <li v-for = "item in lists" :key = "item.id">
            <h3>  商品类型: {{ item.shop_name }} </h3>
            <ul>
                <li v-for = "item in item.type" :key = "item.id">
                    <p> 制造商: {{ item.maker }} </p>
                </li>
                <!-- <li v-for = "ele in item.type" :key = "ele.id">
    					<p> 制造商: {{ ele.maker }} </p>
    				</li> -->
            </ul>
        </li>
    </ul>
    
    <h3> 循环number / string  </h3>
    
    <p v-for = "item in 10"> {{ item }} </p>
    <p v-for = "item in 'abc'"> {{ item }} </p>
    
  • 总结:

    • 列表渲染参数最多可写三个 item key index
    • 列表渲染要在渲染元素属性里加一个key,作为整个元素唯一标识,最好不用index,因为删除一个元素后,index会发生改变,index不唯一
    • 循环嵌套时,参数名可以相同
    • in和of都可以使用

7、事件处理器

  • v-on指令
new Vue({
   el: '#app',
   data: {
     a: 10,
     b: 20
   },
   methods: {
     // methods里面存储是事件处理程序
     fn () {
       alert('事件')
     },
     eventHandler ( e ) {
       console.log( e )
     },
     argumentHandler ( a,b,e ) {
       console.log( e )
       console.log( a + b )
     }
   }
 })
<div id="app">
    <button v-on:click = 'fn'> 点击 </button>
    <button @click = 'fn'> 点击 </button>
    <button @click = "eventHandler"> 事件对象 </button>
    <button @click = "argumentHandler( a,b,$event )"> 事件参数 </button>
</div>
  • 事件修饰符

    • 在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是常见的需求。好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。
    • 为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。修饰符是由点开头的指令后缀来表示的。
    • 常见事件修饰符
      • .stop
      • .prevent
      • .capture
      • .self
      • .once
      • .passive
      • 自定义按键修饰符
        • Vue.config.keyCodes.f1=112
    • 示例:
     <div class="middle" @click.stop = "middleHandler">
         <div class="small" @click.stop = "smallHandler"></div>
     </div>
     <input type="text" @keyUp.13 = "getValue">
     <input type="text" @keyUp.enter = "getValue">
    
  • 总结:

    • 当一个事件处理程序中有多个参数 且其中一个参数是事件对象时,那么调用这个方法时要添加一个实参$event与之对应

8、表单控件绑定

  • v-model指令
    • 双向数据绑定
    • 只适用于表单,因为v-model默认绑定value属性
     new Vue({
        el: '#app',
        data: {
          msg: 'hello Vue.js'
        }
      })
    
    <div id="app">
        <input type="text" v-model = "msg">
        <p> {{ msg }} </p>
      </div>
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值