<template> <div class="index"> <Header class="topHeader"></Header> <LeftMenu class="leftMenu"></LeftMenu> <div class="rightContainer" :class="{'content-collapse':collapse}"> <Tags/> <div class="content"> <transition name="move" mode="out-in"> <keep-alive :include="tagsList"> <router-view></router-view> </keep-alive> </transition> </div> </div> </div> </template> <script> import Header from "../components/Header"; import LeftMenu from "../components/LeftMenu"; import bus from "../common/bus"; import Tags from "../common/Tags"; // import moment from 'moment' // @ is an alias to /src export default { name: "Index", data() { return { tagsList: [], collapse: false }; }, components: { Header, LeftMenu, Tags }, created() { //内容区域跟随变化 bus.$on("collapse", msg => { console.log(msg); this.collapse = msg; }), // 只有在标签页列表里的页面才使用keep-alive,即关闭标签之后就不保存到内存中了。 bus.$on("tags", msg => { let arr = []; for (let i = 0, len = msg.length; i < len; i++) { msg[i].name && arr.push(msg[i].name); } this.tagsList = arr; // console.log(tags) }); } }; </script> <style scoped> .index { width: 100%; height: 100%; overflow: hidden; } .content { width: auto; height: 100%; padding: 10px; overflow-y: scroll; box-sizing: border-box; } .rightContainer.content-collapse { left: 48px; } .rightContainer { position: absolute; left: 180px; right: 0; top: 72px; height: 100%; overflow-y: scroll; padding-bottom: 30px; transition: left 0.3s ease-in-out; } </style>
时间: 2024-04-28 09:25:38 浏览: 11
这是一个 Vue.js 组件的代码,它定义了一个名为 Index 的组件。这个组件包含了一个 Header 组件、一个 LeftMenu 组件和一个 Tags 组件。其中,Header 组件和 LeftMenu 组件用于显示网站的顶部和左侧菜单栏,Tags 组件则用于标记网站的标签页。在组件的 created 钩子函数中,它监听了两个事件:collapse 和 tags,用于控制组件的展开和标签页的显示。组件还包含了一些 CSS 样式,用于控制组件的布局和样式。
相关问题
header在最上面,但是现在显示在了中间
好的,你可以在样式中给 Header 组件加上 `position: fixed;` 和 `top: 0;`,这样就可以让 Header 组件固定在页面的顶部了。修改后的代码如下:
```html
<template>
<div class="index">
<Header class="topHeader"></Header>
<LeftMenu class="leftMenu"></LeftMenu>
<div class="rightContainer" :class="{'content-collapse':collapse}">
<Tags/>
<div class="content">
<transition name="move" mode="out-in">
<keep-alive :include="tagsList">
<router-view></router-view>
</keep-alive>
</transition>
</div>
</div>
</div>
</template>
<script>
import Header from "../components/Header";
import LeftMenu from "../components/LeftMenu";
import bus from "../common/bus";
import Tags from "../common/Tags";
export default {
name: "Index",
data() {
return {
tagsList: [],
collapse: false
};
},
components: {
Header,
LeftMenu,
Tags
},
created() {
//内容区域跟随变化
bus.$on("collapse", msg => {
console.log(msg);
this.collapse = msg;
}),
// 只有在标签页列表里的页面才使用keep-alive,即关闭标签之后就不保存到内存中了。
bus.$on("tags", msg => {
let arr = [];
for (let i = 0, len = msg.length; i < len; i++) {
msg[i].name && arr.push(msg[i].name);
}
this.tagsList = arr;
// console.log(tags)
});
}
};
</script>
<style scoped>
.index {
width: 100%;
height: 100%;
overflow: hidden;
}
.topHeader {
position: fixed;
top: 0;
left: 0;
right: 0;
}
.content {
width: auto;
height: 100%;
padding: 10px;
overflow-y: scroll;
box-sizing: border-box;
}
.rightContainer.content-collapse {
left: 48px;
}
.rightContainer {
position: absolute;
left: 180px;
right: 0;
top: 72px;
height: 100%;
overflow-y: scroll;
padding-bottom: 30px;
transition: left 0.3s ease-in-out;
}
</style>
```
这样就可以让 Header 组件固定在页面的顶部了。
用elements写一个左侧菜单栏并且添加代码要求能够切换不同界面
好的,首先我们需要在左侧添加一个菜单栏,可以使用 `Nav` 组件实现:
```html
<Nav>
<NavSection>
<NavItem>
<NavItemLabel>首页</NavItemLabel>
</NavItem>
<NavItem>
<NavItemLabel>文章</NavItemLabel>
</NavItem>
<NavItem>
<NavItemLabel>视频</NavItemLabel>
</NavItem>
</NavSection>
</Nav>
```
然后我们需要在每个菜单项上添加点击事件,使其能够切换到对应的界面。在这里我们可以使用 `Router` 组件实现:
```html
<Router>
<Route path="/" component={HomePage} />
<Route path="/article" component={ArticlePage} />
<Route path="/video" component={VideoPage} />
</Router>
```
接下来我们需要在每个菜单项上添加 `onClick` 事件处理函数,使其能够根据 `Router` 组件中的路由路径切换到对应的界面:
```html
<Nav>
<NavSection>
<NavItem onClick={() => navigate("/")}>
<NavItemLabel>首页</NavItemLabel>
</NavItem>
<NavItem onClick={() => navigate("/article")}>
<NavItemLabel>文章</NavItemLabel>
</NavItem>
<NavItem onClick={() => navigate("/video")}>
<NavItemLabel>视频</NavItemLabel>
</NavItem>
</NavSection>
</Nav>
```
最后,我们需要在每个界面中添加对应的内容,例如:
```html
const HomePage = () => {
return <h1>这是首页</h1>;
};
const ArticlePage = () => {
return <h1>这是文章页面</h1>;
};
const VideoPage = () => {
return <h1>这是视频页面</h1>;
};
```
完整代码示例:
```html
import { Nav, NavSection, NavItem, NavItemLabel, Router, Route, navigate } from "@elevenia/master-ui/components";
const HomePage = () => {
return <h1>这是首页</h1>;
};
const ArticlePage = () => {
return <h1>这是文章页面</h1>;
};
const VideoPage = () => {
return <h1>这是视频页面</h1>;
};
const LeftMenu = () => {
return (
<>
<Nav>
<NavSection>
<NavItem onClick={() => navigate("/")}>
<NavItemLabel>首页</NavItemLabel>
</NavItem>
<NavItem onClick={() => navigate("/article")}>
<NavItemLabel>文章</NavItemLabel>
</NavItem>
<NavItem onClick={() => navigate("/video")}>
<NavItemLabel>视频</NavItemLabel>
</NavItem>
</NavSection>
</Nav>
<Router>
<Route path="/" component={HomePage} />
<Route path="/article" component={ArticlePage} />
<Route path="/video" component={VideoPage} />
</Router>
</>
);
};
export default LeftMenu;
```