vue指令

s指令

指令: ( 是绑定在dom属性上 )

v-show

    可以控制一个dom的显示隐藏( 这个指令操作的是dom的display属性 )
     <h3> v-show </h3>
     <p v-show = "showFlag"> v-show指令 </p>

      var vm = new Vue({
   el: '#app',//给跟实例一个模板( 挂载 )
   data: { 
     showFlag: true,
   }
 })

v-html

    v-html: 可以解析标签型数据( 可以将一个数据展示在一个dom的内容中( 相当于使用了  innerHTML ))

v-text

    v-text:可以将一个数据展示在一个dom的内容中( 相当于使用了  innerHTML )
    条件渲染的指令

v-if

可以控制一个dom的存在与否( 创建 和 销毁 
    v-if  vs  v-show 区别
    - v-if 操作的是dom元素( 组件 ) 的创建或是销毁
          - v-show 操作的是dom元素的display属性
          - v-if可以有多种使用形式: 单路分支, 多路分支, 双路分支
          - v-show 只能写一个单路形式

     实用: 项目中 如何选择这两个使用
          一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。
          因此,如果需要非常频繁地切换,则使用 v-show 较好;
          如果在运行时条件很少改变,则使用 v-if 较好。

v-if 举例

    <div id="app">
    <h3> v-if - 单路分支 </h3>
      <p v-if = "ifFlag"> v-if - 指令的单路分支 </p>
    <h3> v-if - 双路分支 </h3>
      <p v-if = "ifFlag">  双路分支 成立  </p>
      <p v-else> 双路分支不成立 </p>
    <h3> v-if - 多路分支 </h3>
    <p v-if = " type === 'A'"> A </p>
    <p v-else-if = " type === 'B'"> B </p>
    <p v-else> C </p>
    </div>


   var vm = new Vue({
    el: '#app',//给跟实例一个模板( 挂载 )
    data: { 
      ifFlag: false,
      type: 'A'
    }
  })

v-for

​ 列表渲染( 循环 )

  1. 数组  v-for = " (item,index) in arr "       item是arr中每一个元素
  2. 对象  v-for = "(item,key,index) in obj "        item是obj的属性值
  3. json类型数据
  4. 嵌套类型数据

v-for 举例

    <div id="app">
    <h3> 数组 </h3>
    <ul>
      <li v-for = " (item,index) in arr ">
        <p> item :{{ item }} --  index: {{ index }}</p>
      </li>
    </ul>
    <hr>
    <h3> 对象 </h3>
    <ul>
      <li v-for = "(item,key,index) in obj"> 
        <p> value: {{ item }} -- key: {{ key }} -- {{ index }} </p>
      </li>
    </ul>
    <hr>
    <h3> json </h3>
    <ul>
      <li v-for = "(item,index) of json">
        <p> id: {{ item.id }} </p>
        <p> task: {{ item.task }} </p>
        <p> {{ index }} </p>
      </li>
    </ul>
    <hr>
    <h3> 嵌套 </h3>
    <ul>
      <li v-for = " item in lists ">
        <p> id: {{ item.id }} </p>
        <ul>
          <li v-for = "todo in item.todos">
            todos中的数据 -- {{ todo }}
          </li>
        </ul>
      </li>
    </ul>
    </div>


    new Vue({
    el: '#app',
    data: {
      arr: [1,2,3,4],
      obj: {
        id: 1,
        name: '骏哥',
        sex: 'man',
        age: 18
      },
      json: [
        {
          id: 1,
          task: '敲代码1'
        },
        {
          id: 2, 
          task: '敲代码2'
        }
      ],
      lists: [
        {
          id: 1,
          todos: {
            id: 1,
            name: '连城'
          }
        },
        {
          id: 2,
          todos: {
            id: 2,
            name: '文武'
          }
        }
      ]
    }
  })

key

给每一个循环的列表添加一个唯一的标识
通过v-bind来绑定
如果有id,那么我们就使用id,如果没有,我们才会选择index
v-bind: 单项数据绑定: 将一个数据绑定在一个dom的属性上

          <div v-for = " (item,index) in lists" v-bind: key = " item.id "></div>
   简写: <div v-for = " (item,index) in lists" :key = " item.id "></div>

vue中给dom添加类名

1 直接在dom上绑定类名

2 通过对象的形式绑定类名:
  格式: v-bind:class = "{ 属性: boolean }"
  格式: v-bind:class = "{ [data]: boolean }"
  v-bind:可简写为 :
  例:
   <style>
    .size{
      width: 100px;
      height: 100px;
    }
    .bg_color{
      background: red;
    }
  </style>

<div id="app">  
  <p :class = "{ size: true, bg_color: true }"></p>或者
  <p :class = "{ [size]:true, [bg_color]:true }"></p>
</div>

    new Vue({
    el: '#app',
    data: {
      msg: 'hello Vue.js',
      size: 'size',
      bg_color: 'bg_color',
      flag: true
    }
  })

3:通过数组的形式绑定类名:
  格式: v-bind:class = "[ 数据 ]" 
  例:<p :class = "['size','bg_color']"></p>
  注:类名绑定不会覆盖原先的类名

vue中给dom绑定样式

v-bind: style = “”

 new Vue({
    el: '#app',
    data: {
      size: {
        width: '100px',
        height: '100px'
      },
      bg: {
        background: 'purple'
      }
    }
  })

  1. 对象的形式
  <div id="app">
      <p :style = "{ width: size.width,height: size.height,background: 'red'}"></p> 
  </div>  

  2. 数组的形式
   <div id="app">
     <p :style = "[ { width: '100px',background: 'blue'},{ height: '100px' } ]"></p>
   </div>  

vue 中添加事件

v-on 简写:@

  格式:v-on:eventType = " handlerName "
  直接在标签中绑定: <div v-on:click = "事件名称"></div>

  附: 事件对象也可以正常使用

      在事件处理程序中, 写e就可以了

      问题: 如果事件处理程序中有三个参数,第三个参数才是事件对象e,如何实现

      分析: 我们发现事件处理程序中的第三个参数 e 不在是事件对象了,而是一个undefined

      解决: 在函数执行时,传入一个实际参数 $event 来代表事件对象

vue中修改数据

 <div id="app">
    <button @click = "add"> + </button>
    <button @click = "remove"> - </button>
    <button @click = "indexHandler"> 修改第二条数据 </button>
    <ul>
      <li v-for =" item in lists " :key = "item.id">
        {{ item.task }}
      </li>
    </ul>
    <hr>
    <button @click = "arrChange"> 修改第二条数据 </button>
    <ul>
      <li v-for = " (item,index ) in arr " :key = "index">
        {{ item }}
      </li>
    </ul>
  </div>

  new Vue({
    el: '#app',
    data: {
      arr: [1,2,3],
      lists: [
        {
          id: 1,
          task: '锻炼1'
        },
        {
          id: 2,
          task: '敲代码'
        }
      ]
    },
    methods: {
      add () {
        // console.log( this )
        this.lists.push({
          id: this.lists.length + 1,
          task: '打篮球'
        })
      },
      remove () {
        this.lists.pop()
      },
      indexHandler () {
        //将列表中的第二个数据中的task任务修改为 撸猫
          this.lists[1] = {
            id: 2,
            task: '骏哥'
          }
        
          // 将整个列表清空
          // this.lists.length = 0

          // this.lists.splice( 0 )
      },
      arrChange () {
        // this.arr[ 1 ] = '骏哥'  不可以检测到的

        // this.$set( this.arr,'1','骏哥' )
        Vue.set( this.arr,'1','骏哥')
      }
    }
  })

注:问题: 我们直接修改一个数组下的一个数据时,发现下标不能检测变动了

    解决方法: 使用 Vue.set / this.$set
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值