本代码可用于各种需要用户从预定义列表中选择账号的场景,例如:
此代码实现了以下基本功能:
在 <script>
标签中,使用 ref
定义了一个名为 accounts
的响应式数组,其中包含了预定义的账号数据。
const accounts = ref([
{
name: 'John Doe',
email: 'john.doe@example.com',
},
// ...其他账号数据
])
在 <template>
标签中,使用 v-for
循环渲染 accounts
数组中的每个账号。每个账号显示为一个列表项,包含其姓名和电子邮件。
<ul class="space-y-4">
<li v-for="account in accounts" class="flex items-center space-x-4">
<div class="w-8 h-8 rounded-full bg-gray-200"></div>
<div class="flex-1">
<p class="text-sm font-medium">{{ account.name }}</p>
<p class="text-xs text-gray-500">{{ account.email }}</p>
</div>
</li>
</ul>
当用户点击一个账号列表项时,触发一个 @click
事件。该事件处理程序将触发一个名为 selectAccount
的自定义事件,并传递所选账号的信息。
<li @click="selectAccount(account)" class="flex items-center space-x-4">
<!-- ... -->
</li>
methods: {
selectAccount(account) {
this.$emit('select-account', account)
}
}
当用户点击“Sign In”按钮时,触发一个 @click
事件。该事件处理程序将触发一个名为 signIn
的自定义事件,传递所选账号的信息。
<button @click="signIn" class="w-full rounded-md bg-blue-600 py-2 px-4 text-white hover:bg-blue-700">
Sign In
</button>
methods: {
signIn() {
this.$emit('sign-in')
}
}
开发这段代码的过程让我深入了解了 Vue.js 中的响应式性和事件处理。我学会了如何使用 ref
和 v-for
循环来动态渲染数据,以及如何使用自定义事件在组件之间进行通信。
未来,该账号选择器卡片功能可以进行以下扩展和优化: