vue 父子组件的一些问题

原文链接: vue 父子组件的一些问题

上一篇: vue 组件的缓存

下一篇: js promise

属性传递,vue中数据传递是单向的,事件是双向的

在子组件中修改父组件的传入的值会报错,使用事件传递,由子组件发送事件,父组件接受事件后在父组件中修改属性值

165655_nhm8_2856757.png

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <script src="vue.js" charset="utf-8"></script>
</head>

<body>
    <div id="app">
        <!-- 修改父组件传入的值时,子组件会自动更新属性,重新渲染 -->
        <!-- 但是,更改子组件的属性时,无法修改父组件的值,防止子组件无意间更改父组件的状态 -->
        <!-- 数据流是单向的,但控制流可以是逆向的 -->
        <div>
            a:{{a}}
            <button type="button" @click='a = 111'>修改</button>
        </div>
        <my-component :a='a'></my-component>

    </div>
</body>
<script type="text/javascript">
    // 单项数据流
    var myComponent = Vue.extend({
        template: '<div>a:{{a}} <button @click="a=222">修改</button></div>',
        props: {
            a: ''
        },
    })

    new Vue({
        el: '#app',
        data: {
            a: 1
        },
        components: {
            // 将myComponent组件注册到Vue实例下
            'my-component': myComponent
        }
    });
</script>

</html>

组件异步渲染的dom处理

操作dom时最好使用nextTick方法

165901_ylMR_2856757.png

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <script src="vue.js" charset="utf-8"></script>
</head>

<body>
    <div id="app">
        <son ref='son'></son>
    </div>
</body>
<script type="text/javascript">
    let son = {
        template: '<div><p v-for="i in arr">{{i}}</p></div>',
        data() {
            return {
                arr: [1, 2, 3]
            }
        },
        mounted() {
            this.arr = [4, 5, 6]
            console.log('son mounted arr', this.arr)
        }
    }
    new Vue({
        el: "#app",

        components: {
            son
        },
        mounted() {
            console.log('fa mounted', this.arr);
            // 由于异步渲染,所以拿到的dom是没有修改之前的
            console.log(this.$refs.son.$el.innerHTML) // 1 2 3


            // 操作dom 时最好添加nextTick 防止异步渲染时出现的bug
            this.$nextTick(() => {
                console.log(this.$refs.son.$el.innerHTML) //4,5,6

            })
        },

    })
</script>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值