我有一个帖子列表组件和一个帖子组件。
我传递一个方法来从帖子列表调用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>
`
}
正如你在Post组件中看到的那样,你有一个点击来运行他从道具获得的方法,我想在该方法中添加一个变量。
你是怎么做到的?
答案 0 :(得分:22)
通常,click
事件处理程序将接收事件作为其第一个参数,但您可以使用bind
告诉函数使用什么用于其this
和第一个参数(s ):
:clicked="clicked.bind(null, post)
更新的答案:但是,让孩子emit成为一个事件并让父母处理它可能会更直接(并且更符合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
}
});
&#13;
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.min.js"></script>
<post-feed></post-feed>
&#13;
答案 1 :(得分:1)
使用Vue 2并扩展上面的@Roy J代码,我在子组件(Post)中创建了一个方法,该方法调用prop函数并作为回调的一部分发送回数据对象。我还将帖子作为道具传递,并在回调中使用其ID值。
回到帖子组件(父级),我通过引用事件并以这种方式获取ID属性来修改单击的功能。
查看工作Fiddle here
这是代码:
let Post = Vue.extend({
props: {
onClicked: Function,
post: Object
},
template: `
<div>
<button @click="clicked">Click me</button>
</div>
`,
methods: {
clicked() {
this.onClicked({
id: this.post.id
});
}
}
});
let PostsFeed = Vue.extend({
data: function() {
return {
posts: [
{id: 1, title: 'Roadtrip', content: 'Awesome content goes here'},
{id: 2, title: 'Cool post', content: 'Awesome content goes here'},
{id: 3, title: 'Motorcycle', content: 'Awesome content goes here'},
]
}
},
template: `
<div>
<post v-for="post in posts" :post="post" :onClicked="clicked" />
</div>
`,
methods: {
clicked(event) {
alert(event.id);
}
},
components: {
post: Post
}
});
new Vue({
el: '#app',
components: {
'post-feed': PostsFeed
}
});
这是HTML
<div id="app">
<post-feed></post-feed>
</div>
答案 2 :(得分:0)
这是服务:
export const getBuilding = () => {
console.log("service");
return 0;
};
在父组件中:
<Update-Theme :method="parentMethod"/>
import { getBuilding } from "./service";
methods: {
parentMethod() {
console.log("Parent");
getBuilding();
},
}
和子组件
<v-btn color="green darken-1" text @click="closeDialog()">
props: [ "method"],
methods: {
closeDialog() {
this.method();
//this.$emit("update:dialog", false);
},
}