-node-modules 依赖文件 -public 基本文件,包含页面,图片,小图标 -src 项目主场 -tests 测试 .editorconfig 编辑器配置文件 .gitignore git忽略文件 babel.config.js babel配置文件 cypress.json 插件 package.json 描述文件
-assets 静态资源文件 -components 自定义的组件 -router 路由文件 -store 状态管理器 -views 页面㢟 App.vue 入口页面结构 main.js 入口文件
cnpm run servecss
.vue 文件 --- vue的单文件组件,内含组件的结构、组件的逻辑、组件的样式html
<template> <div class="container"> <div class="box"> <header class="header">头部</header> <div class="content">内容</div> </div> <footer class="footer">底部</footer> </div> </template>
<style lang="scss"> @import '@/lib/reset.scss'; // 引入重置样式,@表示的就是src目录 html, body, .container { @include rect(100%, 100%); // width: 100%;height: 100%; } .container { // 建议使用弹性盒布局 @include flexbox(); // display: -webkit-box;display: -ms-flexbox;display: flex; @include flex-direction(column); // -webkit-box-orient: vertical;-webkit-box-direction: normal;-ms-flex-direction: column;flex-direction: column; .box { @include flex(); // -webkit-box-flex: 1;-ms-flex: 1;flex: 1;width: .1px; @include rect(100%, auto); @include flexbox(); @include flex-direction(column); .header { @include rect(100%, 0.44rem); @include background-color(#f66); } .content { @include flex(); @include rect(100%, auto); @include overflow(); // overflow: auto;-webkit-overflow-scrolling: touch; } } .footer { @include rect(100%, 0.5rem); @include background-color(#efefef); } } </style>
<footer class="footer"> <ul> <li> <span></span> <p>首页</p> </li> <li> <span></span> <p>分类</p> </li> <li> <span></span> <p>购物车</p> </li> <li> <span></span> <p>个人</p> </li> </ul> </footer> .footer { @include rect(100%, 0.5rem); @include background-color(#efefef); ul { @include rect(100%, 100%); @include flexbox(); li{ @include flex(); @include rect(auto, 100%); @include flexbox(); // 一下几句实现的是元素的水平垂直居中 @include flex-direction(column); @include justify-content(); // -webkit-box-pack: center;-ms-flex-pack: center;justify-content: center; @include align-items(); // -webkit-box-align: center; -ms-flex-align: center; align-items: center; } } }
地址输入栏不一样,显示不一样的页面vue
以 home/index.vue 为例,复制App.vue文件中的 头部和内容区域的代码node
<template> <div class="box"> <header class="header">首页头部</header> <div class="content">首页内容</div> </div> </template>
const routes = [ { // 路由跟组件时映射关系 path: '/home', name: 'home', // 路由的懒加载 component: () => import('@/views/home/index.vue') }, { path: '/kind', name: 'kind', component: () => import('@/views/kind/index.vue') }, { path: '/cart', name: 'cart', component: () => import('@/views/cart/index.vue') }, { path: '/user', name: 'user', component: () => import('@/views/user/index.vue') } ]
<!-- <div class="box"> <header class="header">头部</header> <div class="content">内容</div> </div> --> <router-view></router-view>
router-view 若是路由是 /home,此处就为首页的组件
浏览器输入 /home /kind /cart /user 查看效果ios
const routes = [ { // 开始添加剧定向 path: '/', redirect: '/home' }, { // 路由跟组件时映射关系 path: '/home', name: 'home', // 路由的懒加载 component: () => import('@/views/home/index.vue') }, .... ]
<footer class="footer"> <ul> <router-link to="/home" tag="li"> <span></span> <p>首页</p> </router-link> <router-link to="/kind" tag="li"> <span></span> <p>分类</p> </router-link> <router-link to="/cart" tag="li"> <span></span> <p>购物车</p> </router-link> <router-link to="/user" tag="li"> <span></span> <p>个人</p> </router-link> </ul> </footer>
li{ @include flex(); @include rect(auto, 100%); @include flexbox(); // 一下几句实现的是元素的水平垂直居中 @include flex-direction(column); @include justify-content(); // -webkit-box-pack: center;-ms-flex-pack: center;justify-content: center; @include align-items(); // -webkit-box-align: center; -ms-flex-align: center; align-items: center; &.router-link-active { // 审查元素得知选中的样式 @include color(#f66); } }
http://iconfont.cn/git
<title>myapp</title> <link rel="stylesheet" href="//at.alicdn.com/t/font_1476238_m5fuchmwska.css">
在 App.vue 中添加图标es6
<footer class="footer"> <ul> <router-link to="/home" tag="li"> <span class="iconfont icon-fonts-shouye"></span> <p>首页</p> </router-link> <router-link to="/kind" tag="li"> <span class="iconfont icon-icon"></span> <p>分类</p> </router-link> <router-link to="/cart" tag="li"> <span class="iconfont icon-gouwuche"></span> <p>购物车</p> </router-link> <router-link to="/user" tag="li"> <span class="iconfont icon-wode"></span> <p>个人</p> </router-link> </ul> </footer>
li{ @include flex(); @include rect(auto, 100%); @include flexbox(); // 一下几句实现的是元素的水平垂直居中 @include flex-direction(column); @include justify-content(); // -webkit-box-pack: center;-ms-flex-pack: center;justify-content: center; @include align-items(); // -webkit-box-align: center; -ms-flex-align: center; align-items: center; &.router-link-active { @include color(#f66); } span { @include font-size(0.24rem); } p { @include font-size(0.12rem); @include margin(-5px 0 0); } }
可能多出会使用到,建议封装为 组件web
<template> <ul class="prolist"> <li class="proitem"> <div class="itemimg"> <img src="" alt=""> </div> <div class="iteminfo"> <h2>标题</h2> </div> </li> </ul> </template>
es6的模块化npm
暴露 export default {}
引入 import MO from './sss'json
<template> <div class="box"> <header class="header">首页头部</header> <div class="content"> <!-- 使用组件 --> <Prolist /> </div> </div> </template> <script> // 引入列表的组件 ---- es6中的模块化 import Prolist from '@/components/Prolist.vue' export default { // 注册组件 components: { // Prolist: Prolist Prolist } } </script>
<style lang="scss"> @import '@/lib/reset.scss'; .prolist { @include rect(100%, auto); .proitem { @include rect(100%, 1rem); @include border(0 0 1px 0, #efefef, solid); // 设定的是一个物理像素 @include flexbox(); .itemimg { @include rect(1rem, 1rem); img { @include rect(0.9rem, 0.9rem); @include border(1px, #f66, solid); @include margin(0.05rem); @include display(block); } } .iteminfo { @include flex(); } } } </style>
cnpm i axios -S
<script> import axios from 'axios' // 引入列表的组件 ---- es6中的模块化 import Prolist from '@/components/Prolist.vue' export default { // 注册组件 components: { // Prolist: Prolist Prolist }, data () { return { prolist: [] } }, created () { axios.get('https://47.103.82.2/douban').then(res => { this.prolist = res.data }) } } </script> <Prolist :prolist="prolist"/>
Prolist.vue 接收数据而且渲染
<template> <ul class="prolist"> <li class="proitem" v-for="item of prolist" :key="item.id"> <div class="itemimg"> <img :src="item.images.small" alt=""> </div> <div class="iteminfo"> <h2>{{ item.title }}</h2> </div> </li> </ul> </template> <script> export default { props: ['prolist'] } </script>
public/index.html 添加meta标签
<meta name="referrer" content="no-referrer">