VUE专题(一)

268 阅读3分钟

此次Vue专题计划从基础语法(v-model会拿出来单独写),再到组件、vue-router和vuex,从简入深,有一个好的基础会使后面的学习事半功倍!

v-text

用于将数据填充到标签中,作用和插值表达式类似,但是不会出现闪动问题。

v-html

用于将HTML片段填充到标签中,可能有安全问题。

v-pre

用于显示原始信息。

v-once

是只渲染一次,后面元素中的数据再更新变化,都不会重新渲染。

v-bind

vue的属性一般用v-bind来绑定属性

v-bind可以简写为(语法糖) :

  • 修饰符

  1. .prop - 被用于绑定 DOM 属性 (property)。(差别在哪里?)
  2. .camel - (2.1.0+) 将kebab-case 特性名转换为 camelCase. (从 2.1.0 开始支持)
  3. .sync (2.3.0+)语法糖,会扩展成一个更新父组件绑定值的 v-on 侦听器。
  • 用法

  1. 动态地绑定一个或多个特性,或一个组件的prop到表达式
  2. 在绑定 class 或 style 特性时,支持其它类型的值,如数组或对象
  3. 在绑定 prop 时,prop 必须在子组件中声明。可以用修饰符指定不同的绑定类型
  4. 没有参数时,可以绑定到一个包含键值对的对象。注意此时 class 和 style 绑定不支持数组和对象。
  • 实例


<!-- 绑定一个属性 --> <img v-bind:src="imageSrc">

<!-- 缩写 --> <img :src="imageSrc">

<!-- 内联字符串拼接 --> <img :src="'/path/to/images/' + fileName">

<!-- class 绑定 --> <div :class="{ red: isRed }"></div> <div :class="[classA, classB]"></div> <div :class="[classA, { classB: isB, classC: isC }]">

<!-- style 绑定 --> <div :style="{ fontSize: size + 'px' }"></div> <div :style="[styleObjectA, styleObjectB]"></div>

<!-- 绑定一个有属性的对象 --> <div v-bind="{ id: someProp, 'other-attr': otherProp }"></div>

<!-- 通过 prop 修饰符绑定 DOM 属性 --> <div v-bind:text-content.prop="text"></div>

<!-- prop 绑定。“prop”必须在 my-component 中声明。--> <my-component :prop="someThing"></my-component>

<!-- 通过 $props 将父组件的 props 一起传给子组件 --> <child-component v-bind="$props"></child-component>

<!-- XLink --> <svg><a :xlink:special="foo"></a></svg>

v-on

指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。指令简写为 @

  • 事件修饰符

.stop 阻止冒泡,调用 event.stopPropagation()

.prevent 阻止默认事件,调用 event.preventDefault()

.capture 添加事件侦听器时使用事件捕获模式

.self 只当事件在该元素本身(比如不是子元素)触发时触发回调

.once 事件只触发一次

  • 实例

<div id="app">
        <h1>事件处理</h1>
        <h2>基本语法</h2>
        <button v-on:click='handleClick'>test</button>
        <h2>简写</h2>
        <button @click='handleClick2'>test</button>
        <h2>不要使用箭头函数定义事件处理函数</h2>
        <button @click='handleClick3'>test</button>

        <h2>默认参数</h2>
        <p>事件处理函数默认接收一个参数:event 事件对象</p>
        <button @click='handleClick4'>test</button>

        <h2>事件传参</h2>
        <ul>
            <li v-for='item in todos'>{{ item }}
                <button @click='handleClick5(item)'>test</button>
            </li>
        </ul>
        <p>如果想要在手动传递了参数的情况下还得到默认的 event 事件对象</p>
        <p>$event 是固定的语法 API,在这里就表示那个事件对象</p>
        <button @click='handleClick6(123,$event)'>test</button>
    </div>

v-for和Key

用于遍历,把一个数组对应为一组元素。

key

唯一标识,不建议使用index。(diff算法)

  • 四种用法

  1. 迭代普通数组
  2. 迭代对象数组
  3. 迭代对象

在data中定义对象

data:{
      user:{
        id:1,
        name:'托尼.贾',
        gender:'男'
      }
}
在

html中使用 v-for 指令渲染

<p v-for="(val,key) in user">--键是--{{key}}--值是--{{val}}</p>
  1. 迭代数字注意:

如果使用v-for迭代数字的话,前面 count 的值从 1 开始

 <p v-for="count in 10">这是第{{count}}次循环</p>

v-if和v-show

   决定元素是否显示与隐藏
    v-if
        语法:<元素 v-if='表达式'></元素>
    v-show
        语法:<元素 v-show='表达式'></元素>

    两者都是
        true显示
        false不显示
    
    区别
    v-if   
        true 渲染该元素
        false 不渲染该元素
    v-show 只是简单的控制display
        true: diaplay:block
        false: display:none
    结论:
        一般来说,v-if有更高的切换开销,v-show有更高的初始化开销
        如果需要频繁切换推荐使用v-show