VueJS如何使用组件中的父方法

Posted

技术标签:

【中文标题】VueJS如何使用组件中的父方法【英文标题】:VueJS How to use parent method from component 【发布时间】:2017-03-12 18:51:24 【问题描述】:

我想从组件中访问父级的方法。 (无道具)

这是 html

<div id="el">
    <user v-for="user in users" :item="user"></user>
</div>

这是 Vue 代码:

var usersData = [
     id:1, firstname:'John', lastname: 'Doe' ,
     id:2, firstname:'Martin', lastname: 'Bust' 
];

var vm = new Vue(
    el: '#el',
    data:  users: usersData ,
    methods: 
        getFullName: function (user) 
            return user.id + '. ' + user.firstname + ' ' + user.lastname;
        
    ,
    components: 
        user: 
            template: '<span> fullName </span>',
            props: ['item'],
            computed: 
                fullName: function()
                    return this.$parent.getFullName(this.item);
                
            ,
        
    
);

VueJS 版本:2.0.2

this.$parent.$options.methods.getFullName()this.$parent.methods.getFullName() 都不起作用。

【问题讨论】:

只需在 jsbin 上运行这段代码就可以了——它应该返回全名。我想知道你看到了什么问题? 谢谢,它可以在 jsbin 上运行。 虽然不推荐使用this.$parent,但我不知道在没有道具的情况下以这种方式访问​​父函数是否可以。当然可以,您的代码 sn-p 没有任何问题。 Vue 2.0 文档建议使用 injectprovide 以获得更好的扩展解决方案:vuejs.org/v2/guide/… 【参考方案1】:

对于 Vue.js 版本 2.2.0+,您可以像这样使用 injectprovide 的依赖注入:

HTML:

<div id="el">
    <user v-for="user in users" :item="user"></user>
</div>

javascript

var usersData = [
     id:1, firstname:'John', lastname: 'Doe' ,
     id:2, firstname:'Martin', lastname: 'Bust' 
];

var vm = new Vue(
    el: '#el',
    data:  users: usersData ,
    methods: 
        getFullName: function (user) 
            return user.id + '. ' + user.firstname + ' ' + user.lastname;
        
    ,
    provide: function () 
        return 
            getFullName: this.getFullName
        
    ,
    components: 
        user: 
            template: '<span> fullName </span>',
            inject: ['getFullName'],
            props: ['item'],
            computed: 
                fullName: function()
                    return this.getFullName(this.item);
                
            ,
        
    
);

小提琴:https://jsfiddle.net/haaiee/v1ahoytm/2/

【讨论】:

以上是关于VueJS如何使用组件中的父方法的主要内容,如果未能解决你的问题,请参考以下文章

如何使用模板语法访问 vuejs 中的父数据值

有没有办法从VueJS中的父级触发组件方法?

发出的事件不会调用 Vue JS 组件中的父方法

在 VueJS 中调度后如何发出事件?

从 VueJS 的父组件中引用子组件的索引

如何在 VueJS 中连接/修改道具