vueDay02(单向绑定、双向绑定、条件渲染、循环渲染)

这篇博客深入探讨了Vue.js中的响应式数据原理,详细介绍了单向绑定和双向数据绑定的概念。同时,讨论了条件渲染的v-if与v-show指令的使用差异,并解析了在循环渲染中key值的重要性。通过实例,帮助读者更好地理解和应用这些核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vue中的响应式数据(单项绑定)

1.属性绑定
2.样式绑定
3.插值表达式
等。。。。。。

vue中的响应式数据(动态响应)是怎么实现的

1.劫持了data对象中的成员
2.采用发布者-订阅者的设计模式 然后重写了成员的set方法;
3.核心是es5的Object.defineProperty静态方法;
4.vue2.0使用的Object.defineProperty 而vue3.0 用的es6的proxy 不仅仅劫持了方法(可以通过this.函数名获取函数,和获取data的数据一样);

双向数据绑定

描述:在页面交互中,有些值用户可以修改,如:input的value值 如果只对input进行响应式数据绑定的话,那么在用户输入值是不会改变vue中的data值;而双向数据绑定就是在用户输入的值与vue中的data值一致;不管是用户改变还是我们修改;

vue指令 v-model = '绑定的data属性'
//底层实现
<div class="box">
        <input type="text" :value='inputValue' @input='changeValue'>
        <button @click='send'> 发送</button>
        <!-- 语法糖 -->
        <input type="text" v-model='inputValue'>
    </div>
    <script>
        new Vue({
            el: '.box',
            data: {
                inputValue: '双向数据绑定'
            },
            methods: {
                changeValue(e) {
                    this.inputValue = e.target.value;
                },
                send() {
                    console.log(this.inputValue);
                }
            },

        })
        </script>

条件渲染

指令:v-if='flag' //flag为true时渲染该节点不执行其他else或else if节点代码
	v-else-if='flag2'//同上
	v-else
	v-show='flag'//flag为true时渲染该节点;
<div class="box">
        <div v-show="flag">
            nihao
        </div>
        <div v-if='flag'>
            你好
        </div>
        <div v-else-if='!flag'></div>
        <div v-else></div>
        <button @click='fn'>diani</button>
    </div>
    <script>
        new Vue({
            el: '.box',
            data: {
                flag: true
            },
            methods: {
                fn() {
                    this.flag = !this.flag;
                }
            },
        })
    </script>

v-if 和v-show的区别

v-if:false 
会在文档树以及呈现树(文档树与css规则树结合产生)中消失,原理是用注释把组件销毁实现
v-show:
false只会在呈现树中消失 而在文档树中会保留 ,原理用css的display设为none实现
v-show具有较高的渲染消耗 
v-if 具有较高的切换消耗(不存在内存中) 

循环渲染

v-for='`在这里插入代码片`el in arr'//循环会把绑定的节点后代全部循环一遍;
:key=''// 主要作用是对组件的区分.
//v-for 搭配 v-if  放在一起时有版本限制,当放在一起时v-for优先执行;
<h1 v-for='el in arr' v-if='el[id]!=1'></h1>//版本限制;
<h1 v-for='el in arr' >
    //template 是空标签 不会在节点树中 如果用div会每次循环都有一个多余的div;
    <template v-if='el[id]!=1'>
        数据	
    </template>
</h1>

循环渲染与key值

 <div class="box">
        <div v-for='el in arr'>
            <div v-html='el.text'></div>
            <div v-for='secarr in arr2'>
                <div v-if='el.id==secarr.a_id'>{{secarr.text}}</div>
            </div>
        </div>
    </div>
    <script>
        new Vue({
            el: '.box',
            data: {
                arr: [
                    { id: 1, text: '这是id为1的商品' },
                    { id: 2, text: '这是id为2的商品' },
                    { id: 3, text: '这是id为3的商品' },
                    { id: 4, text: '这是id为4的商品' },
                ],
                arr2: [
                    { id: 1, a_id: 1, text: '这是外键为1的商品' },
                    { id: 2, a_id: 1, text: '这是外键为1的商品' },
                    { id: 3, a_id: 2, text: '这是外键为2的商品' },
                    { id: 4, a_id: 2, text: '这是外键为2的商品' },
                ]
            }
        })

案例:

  <div class="bigbox">
        <ul>
            <li v-for='el in arr'>
                <p v-html='el.text'></p>
                <img :src="el.imgsrc">
                <div v-for='comment in arr2'>
                    <img :src="comment.imgsrc">
                    <div v-html='comment.text'></div>
                </div>
            </li>
        </ul>
   </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值