vue.js - VueJS 插槽 : Why child method passed in via slot from parent doesn't work?

标签 vue.js vuejs2

我有一个简单的vue codesandbox demo .

在此演示中,我通过父级的槽将方法传递给子组件(在子组件中定义)。但是,当单击附加该方法的按钮时,该方法不会执行。

我想知道为什么子方法在通过插槽(从父级)传递时不起作用。我对这背后的逻辑更感兴趣。

App.vue

<template>
  <div id="app">
    <img width="25%" src="./assets/logo.png" />
    <user>
      <button @click="changeName('Don')">Change Name</button>
    </user>
  </div>
</template>

<script>
import user from "./components/user";

export default {
  name: "App",
  components: {
    user
  },
  data: function() {
    return {
      msg: "Name is Bond.. James Bond"
    };
  }
};
</script>

User.vue

<template>
  <div class="wrapper">
    <h2>My name is "{{myName}}"</h2>
    <slot></slot>
  </div>
</template>

<script>
export default {

  data() { 
    return {
      myName: 'Bond'
    }
  },

  methods: {
    changeName: function(newName){
      this.myName = newName
    }
  }
};
</script>

谢谢。

最佳答案

如果调用父级中的方法,则还需要在父级中定义该方法。这与插槽与否无关。

模板中调用的任何方法仅引用该组件的实例。这是不需要引用 this 的副产品。

在您的示例中,要授予父级对 myName 的访问权限,请使用作用域插槽并将 setter 或子实例传递给插槽父级。或者为插槽父级提供点击方法。

这与为什么事件不发送给子进程是密切相关的。请参阅Emit event from content in slot to parent了解更多信息。

关于vue.js - VueJS 插槽 : Why child method passed in via slot from parent doesn't work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54849741/

相关文章:

javascript - 如何使用数组数组中的多个变量进行计算和显示(Vue+laravel)

javascript - 环境变量不适用于带有 Nuxt 的 Vercel

javascript - v-html 中的 Vue 组件/元素

javascript - Buefy 工具提示中的新行

javascript - Vue JS 三元表达式

javascript - 如何在 jquery 动态添加的 html 中呈现 vuejs 组件

javascript - Vue.js 中的 class 和 staticClass 有什么区别吗?

javascript - 数据集未定义 - 这在 vue.js 中

javascript - Chrome 不适用于 vuejs v-on :click in option tag

javascript - Laravel Vuejs 自定义 Css 和 Js 文件