Vue.js将函数作为prop传递,并让子进程调用数据

Tzo*_*Noy 27 javascript vue.js vue-component

我有一个帖子列表组件和一个帖子组件.

我传递一个方法来从帖子列表调用post组件,所以当点击一个按钮时,它将被调用.

但是我希望在单击此函数时传递post id

码:

let PostsFeed = Vue.extend({
    data: function () {
        return {
          posts: [....]
        }
    },
    template: `
      <div>
        <post v-for="post in posts" :clicked="clicked" />
      </div>
    `,
    methods: {
      clicked: function(id) {
        alert(id);
      }
    }
  }
                           
  let Post = Vue.extend({
    props: ['clicked'],
    data: function () {
        return {}
    },
    template: `
      <div>
        <button @click="clicked" />
      </div>
    `
}
Run Code Online (Sandbox Code Playgroud)

正如你在Post组件中看到的那样,你有一个点击来运行他从道具中得到的方法,我想在该方法中添加一个变量.

你是怎样做的?

Roy*_*y J 26

通常,click事件处理程序将接收事件作为其第一个参数,但您可以使用它bind来告诉函数对其this第一个参数使用什么:

:clicked="clicked.bind(null, post)
Run Code Online (Sandbox Code Playgroud)

更新的答案:然而,让孩子发出一个事件并让父母处理它可能会更直接(并且更符合Vue标准).

let Post = Vue.extend({
  template: `
      <div>
        <button @click="clicked">Click me</button>
      </div>
    `,
  methods: {
    clicked() {
      this.$emit('clicked');
    }
  }
});

let PostsFeed = Vue.extend({
  data: function() {
    return {
      posts: [1, 2, 3]
    }
  },
  template: `
      <div>
        <post v-for="post in posts" @clicked="clicked(post)" />
      </div>
    `,
  methods: {
    clicked(id) {
      alert(id);
    }
  },
  components: {
    post: Post
  }
});

new Vue({
  el: 'body',
  components: {
    'post-feed': PostsFeed
  }
});
Run Code Online (Sandbox Code Playgroud)
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.min.js"></script>
<post-feed></post-feed>
Run Code Online (Sandbox Code Playgroud)