Vue处理边界之$root、$parent、$refs

Vue处理边界之root、parent、$refs

下面的功能都是有风险的,尽量避免使用

Vue 子组件可以通过 $root 属性访问父组件实例的属性和方法

<div id="app">
    <root-obj></root-obj>
</div>
Vue.component('root-obj', {
    data() {
        return {

        }
    },
    template: `<div>
                    <button @click='getRoot'>$Root</button>
                </div>`,
    methods: {
        getRoot() {
            console.log(this)
            console.log(this.$root)
        }
    }
})
var app = new Vue({
    el: '#app',
    data: {
        msg: 'Root'
    }
})

root 和parent 的区别

root 和parent 都能够实现访问父组件的属性和方法,两者的区别在于,如果存在多级子组件,通过parent 访问得到的是它最近一级的父组件,通过root 访问得到的是根父组件

<div id="app">
    <root-obj></root-obj>
</div>
Vue.component('root-obj', {
    data() {
        return {

        }
    },
    template: `<div>
                    <button @click='getRoot'>子组件</button>
                    <child-component></child-component>
                </div>`,
    methods: {
        getRoot() {
            console.log(this)
            console.log(this.$root)
            console.log(this.$parent)
        }
    }
})
Vue.component('child-component', {
    data() {
        return {

        }
    },
    template: `<div>
                <button @click='getRoot'>子子组件</button>
                </div>`,
    methods: {
        getRoot() {
            console.log(this)
            console.log(this.$root)
            console.log(this.$parent)
        }
    }
})
var app = new Vue({
    el: '#app',
    data: {
        msg: 'Root'
    }
})

$refs 访问子组件实例

通过在子组件标签定义 ref 属性,在父组件中可以使用$refs 访问子组件实例

<button @click='refView'>通过ref访问子组件</button>
Vue.component('base-input', {
    data() {
        return {
            msg: 'base-input'
        }
    },
    template: `<input type='text'/>`
})
var app = new Vue({
    el: '#app',
    data: {
        msg: 'Root'
    },
    methods: {
        refView() {
            console.log(this.$refs.baseInput)
            this.$refs.baseInput.$el.focus()
        }
    }
})
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,165评论 0 29
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,354评论 0 6
  • 今天没有做瑜伽,更没有完成每天三节法语课的计划,但是上午去黑沙滩参加了一个当地人纪念航海壮举的活动,人头攒动,人声...
    樂棘阅读 301评论 1 0
  • 使用 Support Annotation Library 写在前面     在看《Android高级进阶》一书看...
    Kinton阅读 581评论 0 2
  • 1.Install Linux OS for server •MakeLinux install boot dis...
    Janny_lwj阅读 437评论 0 0

友情链接更多精彩内容