从零开始系列之vue全家桶(4)带新手小白一起搭建第一个个人网站项目
未经允许,严禁转载,全文由blackchaos提供。
在安装好了前面大部分需要的插件,我们开始进行第一个个人项目。结合vue+vuex+vue-cli+vue-router+webpack使用。
1.我们先写用vue-router来单页面切换路由。先进入src文件夹。在components文件夹下创建五个文件分别是Home.vue,About.vue,Contact.vue,MyHeader.vue,Myfooter.vue.
将router里的index.js打开。修改代码为:
import Vue from 'vue' import Router from 'vue-router' import Home from '@/components/Home' import About from '@/components/About' import Contact from '@/components/Contact' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'Home', component: Home }, { path: '/about', name: 'About', component: About }, { path: '/contact', name: 'Contact', component: Contact } ] })
注意最后一行要多敲一个回车,满足ESLint规则。不能用tab键来规范代码,取而代之的是两个空格。
2.文件由几部分组成,其中最顶层是src下的App.vue文件。在里面添加MyHeader,Myfooter。
2.1先修改App.vue
<template> <div id="app"> <MyHeader></MyHeader> <transition name="fade" mode="out-in"> <keep-alive> <router-view/> </keep-alive> </transition> <MyFooter></MyFooter> </div> </template> <script> import MyHeader from './components/MyHeader' import MyFooter from './components/MyFooter' export default { name: 'App', components: { MyHeader, MyFooter } } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } .fade-enter-active, .fade-leave-active{ transition: all .3s; } .fade-enter, .fade-leave-to{ opacity: 0; } </style>
注意最后一行要多敲一个回车,script和style全部顶格写。写script里属性:后面跟一个空格。最后加一个淡入淡出效果。
2.2然后再写MyHeader.vue
<template> <div id="header" class="wrap"> <div class="header"> <h1 class="logo"> <router-link to="/"> <img src="../assets/logo.png" alt="" width="100"> </router-link> </h1> </div> <div class="top-nav"> <div id="navList" class="navlist-wrap"> <div class="navlist clearfix"> <span class="nav-btn"> <router-link to="/">首页</router-link> </span> <span class="nav-btn"> <router-link to="/about">关于</router-link> </span> <span class="nav-btn"> <router-link to="/contact">联系方式</router-link> </span> </div> </div> </div> </div> </template> <script> export default({ name: 'header', data: function () { return { 'nav-btn': 'nav-btn' } } }) </script> <style scoped>
#header{background-color: red} .header{width:1105px;margin:0 auto;height:111px;padding:4px 0 18px;position:relative;*z-index:1} .header .logo{width:300px;height:100px;margin-left: 10px} .top-nav .navlist-wrap{width:1050px;margin:0 auto;position:relative} .top-nav .navlist{position:absolute;right:130PX;top:-40PX} .top-nav .navlist .nav-btn { float:left; margin-left:60px; color:#666; vertical-align: middle; text-decoration:none; font-size: large; } </style>
注意最后一行要多敲一个回车,router-link to就是切换路由了。
2.3最后是MyFooter.vue
<template> <div id="footer"> <span>Copyright © <a href="#">blackchaos</a>. All rights reserved</span> </div> </template> <script> export default({ name: 'footer' }) </script> <style scoped> #footer{height:50px;position:fixed;bottom:0px;left: 0px;background-color: #eeeeee;width: 100%;padding-top: 10px;} </style>
注意最后一行要多敲一个回车。
3.开始三个切换的文件和Store文件:
3.1新建store文件并新建一个store.js文件
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: { count: 0 }, mutations: { add: state => state.count++, dec: state => state.count-- } })
先简单存一个数据和两个方法。最后一行敲个回车。
3.2在main.js文件中引入store
import Vue from 'vue' import App from './App' import router from './router' import store from './store/store' Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', router, store, components: { App }, template: '<App/>' })
最后一行敲个回车。
3.3首先是Home.vue
<template> <div id="home"> <div class="page-header"> <h2>首页</h2> </div> <div class="panel-body"> <p>{{ count }}</p> <p> <button @click="add">+</button> <button @click="dec">-</button> </p> </div> </div> </template> <script> export default({ name: 'home', data: function () { return { localCount: 1 } }, methods: { add () { this.$store.commit('add') }, dec () { this.$store.commit('dec') } }, computed: { count () { return this.$store.state.count } } }) </script> <style scoped> #home{width: 100%;margin: 0 auto;background-color: khaki;height: 400px} </style>
最后一行敲回车,方法写在methods里,this.$store.commit调用.
3.4然后是About.vue和Contact.vue
<template> <div id="contact"> <h2>联系方式</h2> </div> </template> <script> export default({ name:'contact' }) </script> <style scoped> #contact{width: 100%;height: 400px;background-color: lightskyblue;} </style>
<template> <div id="about"> <h2>关于</h2> </div> </template> <script> export default({ name:'about' }) </script> <style scoped> #about{width: 100%;height: 400px;background-color: antiquewhite;} </style>
同样最后一行多一个回车。
照方抓药,给还没完成的同学一个demo
https://github.com/xuchaoyu2000/vueblog
从零开始系列之vue全家桶(4)带新手小白一起搭建第一个个人网站项目的更多相关文章
- 从零开始系列之vue全家桶(3)安装使用vuex
什么是vuex? vuex:Vue提供的状态管理工具,用于同一管理我们项目中各种数据的交互和重用,存储我们需要用到数据对象. 即data中属性同时有一个或几个组件同时使用,就是data中共用的属性. ...
- 从零开始系列之vue全家桶(1)安装前期准备nodejs+cnpm+webpack+vue-cli+vue-router
写在前面: 什么是全家桶? 包含了vue-router(http://router.vuejs.org),vuex(http://vuex.vuejs.org), vue-resource(https ...
- 从零开始系列之vue全家桶(2)安装调试插件vue Devtools
小白安装前提是会用git,会从github上找东西. 第一步: 我们可以先从github上找到vue-devtools的项目,下载到本地.下载vue-devtools链接. 克隆方法:git clon ...
- 从零开始系列之vue全家桶(6)实战前的设计
搭建好基本框架后我们应该先想一想个人博客应该有哪些功能呢? 为了更好的适应企业的要求,这里我将搭建一个非典型的博客. 在全部采用单页开发的情况下,使用vue-router,路由分别设置home.abo ...
- Vue全家桶
简介 “简单却不失优雅,小巧而不乏大匠”. Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计. 为什么 ...
- Vue全家桶介绍
一直不清楚全家桶是什么玩意,上网搜了一下,才知道就是平时项目中使用的几个依赖包,下面分享一下 Vue 全家桶介绍 Vue有著名的全家桶系列,包含了vue-router(http://router.vu ...
- Vue 全家桶 + Electron 开发的一个跨三端的应用
代码地址如下:http://www.demodashi.com/demo/11738.html GitHub Repo:vue-objccn Follow: halfrost · GitHub 利用 ...
- Nuxt + Vue 全家桶
引子 情由无中有,一旦有了,便万劫不复 简介 “简单却不失优雅,小巧而不乏大匠”. Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架.它是以数据驱动和组件化的思想构建 ...
- 用 Vue 全家桶二次开发 V2EX 社区
一.开发背景 为了全面的熟悉Vue+Vue-router+Vuex+axios技术栈,结合V2EX的开放API开发了这个简洁版的V2EX. 在线预览 (为了实现跨域,直接npm run dev部署的, ...
随机推荐
- PHP源代码加密
加密软件(php_screw) >下载网站:http://sourceforge.net/projects/php-screw/ >描述:php文件通常以文本格式存贮在服务器端, 很容易被 ...
- YCSB测试HBase远程完全分布式集群
写在前面 本文只讲一个很简单的问题,YCSB对HBase集群的测试.虽然网上有很多介绍YCSB测试HBase的文章,但都是针对本地HBase伪分布式集群的.大家都知道,稍微正式一些的压测都会要求测试客 ...
- DataTables ajax + bootstrap 分页/搜索/排序/常见问题
最近学校的网站建设需要,尝试使用了下Jquery dataTables控件,接触过C#的人都知道,C#中也含有一个DataTable,但它和我们今天讨论的东西无关 我使用的是官网最新的DataTabl ...
- hosts文件路径及文件介绍
路径:WINDOWS/system32/drivers/etc/hosts 内容127.0.0.1 localhost 一. Hosts文件的位置 很多用户都知道在Window系统中有个H ...
- JavaEE Servlet 核心方法及生命周期
做JavaWeb开发,免不了要和Servlet打交道.Servlet是Sun(Oracle)官方定义的一个Web开发规范,所有Servlet开发都必须遵守.自己以前也没有从头做过Web开发,所以这方面 ...
- Spring学习笔记四 整合SSH
三大框架架构(整合原理) 步骤1:导包 Hibernate包 1.Hibernate包,hibernate/lib/required 2.hibernate/lib/jpa | java persis ...
- ThreadLocal 原理和使用场景分析
ThreadLocal 不知道大家有没有用过,但至少听说过,今天主要记录一下 ThreadLocal 的原理和使用场景. 使用场景 直接定位到 ThreadLocal 的源码,可以看到源码注释中有很清 ...
- 听翁恺老师mooc笔记(10)--结构
定义结构: 在程序里,如果想要表达一个数据就需要一个变量,而每个变量又都需要一个类型,之前学过C语言中有int.double.float.char等这些基础类型,还有指针.数组等.如果你要表达的数据比 ...
- C语言博客作业-结构体
一.PTA实验作业 6-2 按等级统计学生成绩 1. 本题PTA提交列表 2. 设计思路 定义i,count存放不及格人数 for i=0 to n-1{ 判断 score的值的范围 if 100&g ...
- Beta版本展示
Beta版本展示 开发团队:MyGod 团队成员:程环宇 张芷祎 王田路 张宇光 王婷婷 源码地址:https://github.com/WHUSE2017/MyGod MyGod团队项目的目标: 让 ...