VueJS select 列表中的对象并显示功能
VueJS select object from list and display with function
我需要获取列表中显示的我单击的元素。并通过 index.html
上的邮件列表标签在我的 vue 实例上的方法上打印此元素
所以我有 Vue 组件迭代 json 对象并且只打印它的每个元素的两个属性:
Vue.component('mail-list', {
props: ['inboxmail'],
methods: {
selectmail: function(){
this.$emit('selectmail', this.mail);
}
},
template:
`
<div>
<ul>
<li v-for="i in inboxmail" @click="selectedmail">
{{i.from}}:{{i.subject}}
</li>
</ul>
</div>
`
});
在 运行 之后,我的 index.html 上显示了两个元素,它们是:
test1@test.com:嗨
test2@test.com:你好吗?
我想点击这两个元素之一,得到我点击的那个。然后通过 index.html
中的邮件列表标签将其发送到名为 setSelectedMail 的 vue 方法
index.html:
<div id="app">
<mail-list v-bind:inboxmail="inbox" @selectmail="setSelectedMail($event)"></mail-list>
</div>
最后,这是我想从中获取所选邮件的 vue 实例:
let options = {
el: "#app",
data: {
inbox: '',
selectedMail:{}
},
methods: {
setSelectedMail: function(mail){
this.selectedMail = mail;
}
} //end methods
}
//ViewModel (vm)
let vm = new Vue(options);
我做错了什么?
检查这个。您的代码中的一些更正。
@click="selectmail(i.from)"
methods: {
selectmail: function(value) {
this.$emit("selectmail", value);
}
}
在 codesandbox or Github 中使用您的代码进行演示。
<!-- Complete code -->
<!-- MailList -->
<template>
<div>
<ul>
<li v-for="i in inboxmail" @click="selectmail(i.from)"
v-bind:key="i.from">{{i.from}}:{{i.subject}}</li>
</ul>
</div>
</template>
<script>
export default {
name: "MailList",
props: ["inboxmail"],
methods: {
selectmail: function(value) {
this.$emit("selectmail", value);
}
}
};
</script>
<!-- App.Vue -->
<template>
<div id="app">
<mail-list v-bind:inboxmail="inbox"
@selectmail="setSelectedMail($event)">
</mail-list>
Selected: {{selectedMail}}
</div>
</template>
<script>
import HelloWorld from "./components/HelloWorld";
import MailList from "./components/MailList";
export default {
name: "App",
components: {
HelloWorld, MailList
},
data: function(){
return {
inbox: [{
from: 'test1@test.com',
subject: 'Hi'
},{
from: 'test2@test.com',
subject: 'How are you?'
}],
selectedMail: {}
};
},
methods: {
setSelectedMail: function(mail) {
this.selectedMail = mail;
}
} //end methods
};
</script>
<style>
#app {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
我需要获取列表中显示的我单击的元素。并通过 index.html
上的邮件列表标签在我的 vue 实例上的方法上打印此元素所以我有 Vue 组件迭代 json 对象并且只打印它的每个元素的两个属性:
Vue.component('mail-list', {
props: ['inboxmail'],
methods: {
selectmail: function(){
this.$emit('selectmail', this.mail);
}
},
template:
`
<div>
<ul>
<li v-for="i in inboxmail" @click="selectedmail">
{{i.from}}:{{i.subject}}
</li>
</ul>
</div>
`
});
在 运行 之后,我的 index.html 上显示了两个元素,它们是:
test1@test.com:嗨
test2@test.com:你好吗?
我想点击这两个元素之一,得到我点击的那个。然后通过 index.html
中的邮件列表标签将其发送到名为 setSelectedMail 的 vue 方法index.html:
<div id="app">
<mail-list v-bind:inboxmail="inbox" @selectmail="setSelectedMail($event)"></mail-list>
</div>
最后,这是我想从中获取所选邮件的 vue 实例:
let options = {
el: "#app",
data: {
inbox: '',
selectedMail:{}
},
methods: {
setSelectedMail: function(mail){
this.selectedMail = mail;
}
} //end methods
}
//ViewModel (vm)
let vm = new Vue(options);
我做错了什么?
检查这个。您的代码中的一些更正。
@click="selectmail(i.from)"
methods: {
selectmail: function(value) {
this.$emit("selectmail", value);
}
}
在 codesandbox or Github 中使用您的代码进行演示。
<!-- Complete code -->
<!-- MailList -->
<template>
<div>
<ul>
<li v-for="i in inboxmail" @click="selectmail(i.from)"
v-bind:key="i.from">{{i.from}}:{{i.subject}}</li>
</ul>
</div>
</template>
<script>
export default {
name: "MailList",
props: ["inboxmail"],
methods: {
selectmail: function(value) {
this.$emit("selectmail", value);
}
}
};
</script>
<!-- App.Vue -->
<template>
<div id="app">
<mail-list v-bind:inboxmail="inbox"
@selectmail="setSelectedMail($event)">
</mail-list>
Selected: {{selectedMail}}
</div>
</template>
<script>
import HelloWorld from "./components/HelloWorld";
import MailList from "./components/MailList";
export default {
name: "App",
components: {
HelloWorld, MailList
},
data: function(){
return {
inbox: [{
from: 'test1@test.com',
subject: 'Hi'
},{
from: 'test2@test.com',
subject: 'How are you?'
}],
selectedMail: {}
};
},
methods: {
setSelectedMail: function(mail) {
this.selectedMail = mail;
}
} //end methods
};
</script>
<style>
#app {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>