举例详解:VUE常用指令

本文详细介绍了Vue.js中的核心指令,包括v-model的双向数据绑定,v-on的事件处理,v-pre的编译跳过,v-text与v-html的区别,v-bind的属性绑定,以及v-cloak在解决延迟渲染问题上的应用。通过实例展示了每个指令的用法和效果。

VUE常用指令

一、v-model指令

v-model在表单控件或者组件上创建双向绑定,本质上是负责监听用户的输入事件(onchange,onkeyup,onkeydown等)以更新数据,并对一些极端场景进行一些特殊处理

例如:

      <div id="dd">

        <input type="text" value="" v-model='user'>
        <!-- 双向绑定 -->
        <p>{{user}}</p>

    </div>
    <script src="vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#dd',
            data: {
                user: "this  is  v-model"
            }
        })
    </script>

vue使用v-model实现这些标签数据的双向绑定,它会根据控件类型自动选取正确的方法来更新元素。

运行效果

当删除input中的文字时,p文本也相应删除

运行结果

二、v-on指令

v-on:指令就是给元素进行事件绑定
例如:有个按钮,当点击的时候执行一些操作

    <div id="ddd">
        <input type="text" v-model='num'><br/>
        <input type="button" v-on:click="add" value="加一">
        <input type="button" @click="dda" value="减一">
         //在input中加入一个button并绑定一个点击事件
    </div>
    <script src="vue.js"></script>
    <script>
var vm =new  Vue({
el:"#ddd",
data:{
num:1
},
methods:{
    add:function(){
  this.num+=1
    },
    dda:function(){
        this.num-=1 
    }
}
})
    </script>

运行结果:当点击加减时,出现相应效果

当点击加减出现相应效果
语法


<标签 v-on:click="事件处理函数名" ></标签>
 
简写形式(v-on: 指令可以简写成 @)
 
<标签 @click="事件处理函数名" ></标签>   

三、v-pre指令

v-pre:跳过这个元素和它的子元素的编译过程。可以用来显示原始标签。跳过大量没有指令的节点会加快编译

   <script src="vue.js"></script>
    <div id="add">
        <p v-pre>{{msg}}</p>
        <!-- 不被编译 -->
        <p>{{msg}}</p>
    </div>
    <script>
        var vm = new Vue({
            el: '#add',
            data: {
                msg: '666'
            }
        })
    </script>

运行结果:
运行结果

四、v-text和v-html指令

v-text是用于操作纯文本,它会替代显示对应的数据对象上的值。当绑定的数据对象上的值发生改变,插值处的内容也会随之更新(v-text可以简写为{{}},并且支持逻辑运算)

v-html用于输出html,它与v-text区别在于v-text输出的是纯文本,浏览器不会对其再进行html解析,但v-html会将其当html标签解析后输出。

       <div id="dd">
        <div v-text='user'> </div>
        <div v-html='user2'> </div>
    </div>

    <script src="vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#dd',
            data: {
                user: "<h3 style='color: red;'>这是v-text</h3>",
                user2: "<h3 style='color: red;'>这是v-html</h3>"
            }
        })
    </script>

运行结果:

运行结果
v-text绑定后是直接显示文本,也就是说你绑定的是什么内容就直接显示什么内容,不作任务的翻译

而v-html从名字上就可以看出,把绑定的文本内容尽量的翻译成html的标签

五、v-bind指令

v-bind用于绑定数据和元素属性

   <div id="ddd">
        <a v-bind:href="url">点击跳转</a>
    </div>
    <script src="vue.js"></script>
    <script>
        var app = new Vue({
            el: '#ddd',
            data: {
                url: "https://www.baidu.com"
            }
        });
    </script>

运行结果:
运行结果
运行结果

v-bind绑定了a标签的href属性,当点击a标签时,会根据对应vue中的对应的url数据进行跳转

六、v-cloak指令
v-cloak指令保持在元素上直到关联实例结束编译。和CSS规则如

[v-cloak] {display:none}

一起用时,可以使用 v-cloak 指令设置样式,这些样式会在 Vue 实例编译结束时,从绑定的 HTML 元素上被移除。
例子:

    <script src="vue.js"></script>
    <div id='ddd'>
        {{msg}}
    </div>
    <script>
setTimeout(()=>{
    new Vue({
        el:"#ddd",
        data:{
msg:'this  is  vue'
        }
    })
},2000)
    </script>

当网络较慢,网页还在加载 Vue.js ,而导致 Vue 来不及渲染,这时页面就会显示出 Vue 源代码。
运行结果

我们可以使用 v-cloak 指令来解决这一问题。

  <div id='ddd' v-cloak>
        {{msg}}
    </div>
<think>我们正在讨论Vue3的语法,用户要求详细的解释、示例和分析。根据之前的对话历史,用户曾询问`@change`和`@click`的区别,并且我们提供了详细的对比和解析。现在用户要求更广泛的Vue3语法大全。我们需要覆盖Vue3的核心语法,包括:1.模板语法(插值、指令)2.响应式基础(ref,reactive)3.计算属性和侦听器(computed,watch)4.条件渲染和列表渲染5.事件处理6.表单输入绑定7.生命周期钩子8.自定义指令9.组件基础(包括setup语法糖)我们将结合引用中的内容,尤其是引用[1](模板语法与数据绑定)、引用[2](Vue3核心变化)、引用[3](计算属性)和引用[4](ref的使用)来构建回答。注意:用户引用的内容虽然有限,但我们可以根据Vue3的官方知识进行扩展,并在适当的地方引用用户提供的引用编号。由于用户要求详细的示例,我们将为每个部分提供代码示例。另外,根据系统指令,我们需要在回答中自然地添加引用标识,例如[^1],以及生成相关问题。现在开始构建回答:</think> ### Vue 3 核心语法大全及详细解析(带示例分析) #### 1. **模板语法与数据绑定** - **插值表达式**:用`{{ }}`动态渲染数据 ```vue <template> <p>计数器: {{ count }}</p> <!-- 显示data中的count值 --> </template> ``` 当`count`变化时自动更新DOM[^1] - **指令系统**: - `v-bind`(简写`:`)动态绑定属性 ```vue <img :src="imageUrl"> <!-- 绑定图片路径 --> ``` - `v-model`双向数据绑定 ```vue <input v-model="message"> <!-- 输入框与message数据双向同步 --> ``` --- #### 2. **响应式系统(Composition API)** Vue 3 使用基于 Proxy 的响应式系统替代 Vue 2 的 `Object.defineProperty`,提供更细粒度的响应跟踪[^2]。 - **`ref()`**:处理基本类型值 ```vue <script setup> import { ref } from 'vue' const count = ref(0) // 创建响应式变量 </script> ``` 通过`.value`访问值:`count.value++` - **`reactive()`**:处理对象类型 ```vue const user = reactive({ name: 'Alice', age: 30 }) ``` --- #### 3. **计算属性(`computed`)** 根据响应式数据派生新值,具有缓存机制[^3]: ```vue <script setup> import { computed, ref } from 'vue' const price = ref(100) const taxPrice = computed(() => price.value * 1.1) // 自动计算含税价 </script> ``` ▲ 应用场景:多数据依赖计算(如购物车总价) --- #### 4. **DOM 操作(`ref` 属性)** 通过`ref`直接访问DOM元素: ```vue <template> <input ref="inputRef"> <!-- 标记DOM元素 --> <button @click="focusInput">聚焦</button> </template> <script setup> import { ref } from 'vue' const inputRef = ref(null) function focusInput() { inputRef.value.focus() // 操作DOM元素 } </script> ``` [^4] --- #### 5. **生命周期钩子(示例)** ```vue <script setup> import { onMounted, onUnmounted } from 'vue' onMounted(() => { console.log('组件已挂载') // 替代Vue2的mounted }) onUnmounted(() => { console.log('组件已卸载') // 清理定时器等资源 }) </script> ``` #### 6. **组件通信** - **Props 传值**: ```vue <!-- 父组件 --> <Child :title="pageTitle" /> <!-- 子组件 --> <script setup> defineProps(['title']) // 声明接收的prop </script> ``` - **自定义事件**: ```vue <!-- 子组件 --> <button @click="$emit('update', newValue)">提交</button> <!-- 父组件 --> <Child @update="handleUpdate" /> ``` --- #### 7. **组合式函数(Composables)** 复用逻辑的封装模式: ```javascript // useCounter.js import { ref } from 'vue' export function useCounter(initialValue = 0) { const count = ref(initialValue) const increment = () => count.value++ return { count, increment } } // 组件中使用 import { useCounter } from './useCounter' const { count, increment } = useCounter() ``` --- ### 语法对比(Vue 2 vs Vue 3) | 特性 | Vue 2 | Vue 3 | |--------------|--------------------|------------------------| | 响应式系统 | Object.defineProperty | Proxy[^2] | | API 风格 | Options API | Composition API | | 片段支持 | 单根节点 | 多根节点 | | 生命周期 | beforeDestroy | beforeUnmount | --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值