用HTML 1.使用插槽vm.$slots实现一个导航栏结构; 2.创建一个自定义插件,实现一个登录页面。
时间: 2024-10-21 21:06:49 浏览: 34
在Vue.js中,HTML模板经常配合组件的`<slot>`特性来实现复用和灵活性,尤其是导航栏结构。下面是如何使用`$slots`来构建一个基础的导航栏:
```html
<!-- 导航栏.vue -->
<template>
<div class="navbar">
<!-- 这里是默认的内容区域 -->
<slot name="default">这是默认内容</slot>
<!-- 使用v-if添加自定义链接 -->
<ul v-if="$slots['link']">
<li v-for="(link, index) in $slots['link']" :key="index">
<router-link :to="link.to">{{ link.text }}</router-link>
</li>
</ul>
</div>
</template>
<script>
export default {
props: {
links: {
type: Array,
default: () => []
}
},
slots: {
link: {
default: null
}
}
};
</script>
```
在这个导航栏组件中,我们定义了两个`slot`,一个是`default`用于放置默认的内容,另一个是`link`用于接收自定义链接数组。如果`links`属性传入数据,那么这些链接将会显示出来。
对于创建一个自定义登录页面的插件(假设使用Vue CLI),首先需要创建一个单独的文件夹并设置为一个Vue组件库。以下是简单的步骤:
1. 创建一个名为`LoginPlugin`的文件夹,例如`src/plugins/Login.vue`。
2. 在`src/plugins/Login.vue`中编写登录组件代码:
```html
<template>
<div class="login-form">
<form @submit.prevent="handleSubmit">
<label for="username">用户名:</label>
<input type="text" id="username" v-model="username">
<label for="password">密码:</label>
<input type="password" id="password" v-model="password">
<button type="submit">登录</button>
</form>
<slot name="message"></slot>
</div>
</template>
<script>
export default {
props: ['errorMessage'],
data() {
return {
username: '',
password: ''
};
},
methods: {
handleSubmit() {
// 实现登录逻辑...
if (!this.username || !this.password) {
this.$emit('error-message', '请输入完整的用户名和密码');
} else {
// 登录成功
this.$emit('success-message', '登录成功');
}
}
}
};
</script>
```
然后在主应用组件中引入并使用它:
```html
<!-- App.vue 或者其他适当的地方 -->
<template>
<LoginPlugin @success-message="showSuccessMessage" @error-message="showErrorMessage">
<div slot="message" v-if="errorMessage">{{ errorMessage }}</div>
</LoginPlugin>
</template>
<script>
import LoginPlugin from '@/plugins/Login.vue';
export default {
components: {
LoginPlugin
},
data() {
return {
errorMessage: ''
};
},
methods: {
showSuccessMessage(message) {
this.errorMessage = '';
},
showErrorMessage(message) {
this.errorMessage = message;
}
}
};
</script>
```
阅读全文