Vue之父组件与子组件

在这里插入图片描述

核心代码如下:

<body>
<div id="app">
    <cpn2></cpn2>
</div>
<script src="../Vue_js/vue.js"></script>
<script>
    //创建子组件
    const cpnC1 = Vue.extend({
        template: '' +
            '<div>' +
            '<h2>我是子组件</h2>' +
            '<p>我是内容:hahahahaha</p>' +
            '</div>'
    })
    //创建父组件
    const cpnC2 = Vue.extend({
        template: '' +
            '<div>' +
            '<h2>我是父组件</h2>' +
            '<p>我是内容:哈哈哈哈</p>' +
            '<cpn1></cpn1>' +
            '</div>',
        components: {
          cpn1: cpnC1
        },
    })
    const app = new Vue ({
        el: '#app',
        data: {
            message: 'vue模板',
        },
        components: {
          cpn2: cpnC2
        },
        methods: {

        },
    })
</script>
</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 是一种用于构建用户界面的渐进式前端框架,其中 Vue 组件是核心概念之一。Vue 中的组件可以理解为自包含、可复用的 UI 单元,每个组件都可以有自己的状态、模板以及功能。 当您需要从组件调用组件的方法时,有几种可行的方式: ### 1. 直接访问属性 如果您的组件暴露了一个方法作为全局属性(例如 `data` 或 `methods` 部分),您可以直接通过 `this.$parent` 访问到组件实例,并调用其方法。 ```javascript <!-- 组件中 --> <template> <button @click="callParentMethod">Call Parent Method</button> </template> <script> export default { methods: { callParentMethod() { this.$parent.someFunction(); } } } </script> ``` ```javascript // 组件中 import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, methods: { someFunction() { console.log('Called by parent'); } } }; ``` ### 2. 使用事件通信 更推荐的做法是使用事件系统。您可以将方法绑定到组件上,然后通过事件传递给组件。 ```javascript <!-- 组件中 --> <template> <button @click="onClick">Call Parent Method</button> </template> <script> export default { methods: { onClick(event) { // 触发事件向组件传递数据或请求调用方法 this.$emit('call-parent-method', '传入的数据'); } } } </script> ``` ```javascript // 组件中 import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { passedData: '' }; }, methods: { onParentMethodCalled(data) { console.log(`Received Data: ${data}`); } }, created() { // 如果你想让组件默认触发这个事件,你可以这么做 this.$refs.childComponent.onClick(); // 这里的 childComponent 应该是一个 ref 变量引用组件 } }; ``` ### 3. 使用 Vuex 状态管理 对于复杂的应用,尤其是大型项目,建议使用像 Vuex 这样的状态管理模式。它允许你在整个应用中共享和管理状态,包括调用跨组件的方法。 ```javascript // 在 Vuex store 中添加一个动作和对应的状态 store.js: ```javascript const state = () => ({ dataToPass: '' }); const mutations = { setDataToPass(state, payload) { state.dataToPass = payload; } }; const actions = { sendData({ commit }) { commit('setDataToPass', '数据'); } }; export default new Vuex.Store({ state, mutations, actions }); ``` ```vue // 组件中调用动作 <template> <!-- ... --> </template> <script> import { mapActions } from 'vuex'; export default { methods: { ...mapActions(['sendData']), sendDataFromParent() { this.sendData(); } } } </script> ``` 这三种方式分别针对了简单的案例、常用的事件驱动场景以及复杂应用中的状态管理和组件交互需求。选择哪种方式取决于具体的项目需求和团队的编码规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值