Vue从零单排_内置组件(2)
Vue
上一篇是说Vue的指令,那么接下来就要实际搭建一个Vue的项目,可能只有指令貌似不够用,那么接下来,遇到什么
问题解决什么问题就可以了,其实做项目没有那么复杂,最首要的就是思路要清晰,其他的都好办
1.怎么搭建环境
好像有一套CLI可以用
2.CLI
官网地址就在这里:Vue-Cli
npm install -g vue-cli
vue init webpack myProject
cd myProject
npm run dev
等待的时间不是很长,就这样,一套基础的环境搭建完毕,启动之后打开 http://localhost:8080/ ,发现一个问题,为什
么我的路由多了一个#号,那么是不是可以去掉hash路由,打开路由文件,这东西属于路由范畴的,我没有配置server,
那么它一定是前端路由管理的,我用的是IDEA可以直接点进去,看具体是怎么用的
node_modules -> vue-router ->router.d.ts
关注这段代码
export type RouterMode = "hash" | "history" | "abstract";
export declare class VueRouter {
constructor (options?: RouterOptions);
app: Vue;
mode: RouterMode;
currentRoute: Route;
}
解决了,向下边这样写,默认给的路由是hash路由
export default new Router({
mode: 'history',
routes: [
{
path: '/',
name: 'HelloWorld',
component: HelloWorld
}]})
3.有了基础环境,那么开始写代码
我们新建一个路由,就叫demo,按照上边的规则,可以这样写
export default new Router({
mode: 'history',
routes: [
{ path: '/',name: 'HelloWorld',component: HelloWorld },
{ path: '/demo',name: 'demo',component: Demo }
]})
刚好用到component,那就看看吧
4.component属于内置组件
Vue内置了五个组件,Component,transition,transition-group,keep-alive,slot
Component
这不就就是组件么!!简单的说,我要造一台车,是不是要有轮子,那么轮子就是一个组件,组成的构件,有了轮子,套在轴承上是不是就可以滚了
那就写一个,当访问/demo的时候我希望看到一个有数据的页面,之前学到的指令恰巧可以用在这里,没毛病
1 | <template> |
三部分组成,template script style 是不是很熟悉
transition(被缓存而不销毁的组件实例) & transition-ground(被缓存而不销毁的组件实例)
翻译一下,过渡(动画),过渡组(批量动画),这就是动画啊,不多解释了,直接上DEMO,就在刚才我们新建的component下写
<div class="hello">
<h1 v-if="msg" @click="show = !show">{{ msg }}</h1>
<transition name="fade">
<p v-show="show">hello</p>
</transition>
</div>
<style scoped>
&.fade-enter-active, &.fade-leave-active
{transition: all 0.5s ease}
&.fade-enter, &.fade-leave-active
{ opacity: 0}
</style>
keep-alive(被缓存而不销毁的组件实例)
<div class="hello">
<keep-alive include="demo">
这里将会缓存名字叫做demo的组件
</keep-alive>
</div>
Slot
这个是一个比较好的功能,react中并没有,不过github上边有一个react-slot包,可以拿来用,其实就是一种多态思想,
slot可以提供这样的功能,我使用一个组件,默认我不传递props时候,它会展现一种状态,当我传递props并且
附带我自定义的内容时候,我希望能展示我自定义的内容,如果你学过Angular,那么就是其中的transclusion
<my-input>
// 我有一个input组件,我期望在我的组件后边附加一个单位
<template slot="append">美元</template>
</my-input>