这是个大多数网站很常见的功能,点击页面右上角头像显示一个悬浮菜单,点击页面其他位置或再次点击头像则菜单隐藏。
作为一个jQuery前端攻城狮实现这个功能可以说是很easy了,但是对只刚粗看了一遍vue文档的菜鸟来说,坑还是要亲自踩过才算圆满。
知识点
组件及组件间通信
计算属性
正文
1. 父组件
这里暂时只涉及系统菜单这一个功能,因此路由暂未涉及。
基本思路是:通过props将showCancel这个Boolean值传递到子组件,对父子组件分别绑定事件,来控制这个系统菜单的显示状态。其中在父组件的绑定click事件中,将传入子组件的showCancel值重置。
这里就涉及第一个小知识点——子组件调用:
首先写好等待被子组件渲染的自定义元素:
接着import写好的子组件:
import THeader from "./components/t-header/t-header";
然后在组件中注册子组件:
components: {
THeader
}
到这里,新入坑的同学可能会比较疑惑这几行代码是怎样把子组件对应到标签的,官方文档是这样说的:
当注册组件 (或者 prop) 时,可以使用 kebab-case (短横线分隔命名)、camelCase (驼峰式命名) 或 PascalCase (单词首字母大写命名);
在 HTML 模板中,请使用 kebab-case;
我的理解是(举例),当自定义元素为时,注册组件名可以有三种写法:t-header、tHeader和THeader,在这种情况下注册的组件会自动识别并渲染到。
需要注意的是,以上使用的是HTML 模板,是在单文件组件里用指定的模板;另外存在一种字符串模板,是用在组件选项里用template: "" 指定的模板。当使用字符串模板时,自定义标签可以用三种写法,具体情况请移步官方文档 组件命名约定。
这样父组件的雏形就诞生了:
import THeader from "./components/t-header/t-header";
export default {
name: "app",
components: {
THeader
},
data() {
return {
showCancel: false
};
},
methods: {
hideCancel() {
this.showCancel = false;
}
}
};
2. 子