欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vue指令

程序员文章站 2022-05-16 18:34:53
...

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
相关标签: vue 指令