从零开始搭建自己的VueJS2.0+ElementUI单页面网站(二、编写导航页)

前言

从零开始搭建自己的VueJS2.0+ElementUI单页面网站(一、环境搭建)一文中我们已经配置好了开发所需要的各种环境,在这一篇博文中我们正式进入开发。对于一个单页面应用来说,导航页是至关重要的一个页面,所有的组件都会在这个页面里进行显示。接下来我们就开始进行导航页的开发。

正文

创建导航页组件

我们在src目录下新建一个文件夹,名为components,今后我们的组件都会放在这个文件夹中。在components目录下新建一个Navi目录,在Navi目录中新建一个名为Navi.vue的组件。至此我们的目录应该是如下图所示:

然后我们修改main.js文件,修改后的文件如下

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-default/index.css'
import Navi from './components/Navi/Navi.vue'

Vue.use(ElementUI)

new Vue({
  el: '#app',
  render: h => h(Navi)
})

我们可以看到render函数的参数由之前的App变为我们新创建的Navi组件。从此我们的程序入口中显示的就是这个Navi.vue里面的内容。之前默认生成的App.vue文件已经无用,我们可以删掉它。
接下来我们对导航页进行简单的布局,我们先来看一下布局的代码
Navi.vue

<template>
    <div style="background-color: #EBEBEB;min-height:800px">
        <div style="width:100%;background-color: #636363; overflow: hidden">
            <span class="demonstration" style="float:left;padding-top:10px;color:white;margin-left:1%">
                网站首页
            </span>
            <span class="demonstration" style="float:left;padding:5px;color:white;margin-left:2%;width:15%">
                <el-input
                        placeholder="请输入"
                        icon="search"
                        v-model="searchCriteria"
                        :on-icon-click="handleIconClick">
                </el-input>
            </span>
            <span class="demonstration" style="float:right;padding-top:10px;margin-right:1%">
                <el-dropdown trigger="click">
                  <span class="el-dropdown-link" style="color:white">
                    admin<i class="el-icon-caret-bottom el-icon--right"></i>
                  </span>
                  <el-dropdown-menu slot="dropdown">
                    <el-dropdown-item>个人信息</el-dropdown-item>
                    <el-dropdown-item>退出登录</el-dropdown-item>
                  </el-dropdown-menu>
                </el-dropdown>
            </span>
        </div>

        <div style="margin-top:5px">
            <el-row :gutter="10">
                <el-col :xs="4" :sm="4" :md="4" :lg="4">
                    <div>
                        <el-menu default-active="1" class="el-menu-vertical-demo" style="min-height:800px">
                            <el-menu-item index="1"><i class="el-icon-message"></i>导航一</el-menu-item>
                            <el-menu-item index="2"><i class="el-icon-menu"></i>导航二</el-menu-item>
                            <el-menu-item index="3"><i class="el-icon-setting"></i>导航三</el-menu-item>
                        </el-menu>
                    </div>
                </el-col>
                <el-col :xs="20" :sm="20" :md="20" :lg="20">
                    <div>
                        <div style="border: 1px solid #A6A6A6; border-radius:6px; padding:5px; margin:2px; background-color: white">
                            <el-breadcrumb separator="/">
                                <el-breadcrumb-item v-for="item in breadcrumbItems">{{item}}</el-breadcrumb-item>
                            </el-breadcrumb>
                        </div>
                    </div>
                </el-col>
            </el-row>
        </div>
    </div>
</template>
<script type="text/ecmascript-6">
    export default {
        data(){
            return {
                searchCriteria: '',
                breadcrumbItems: ['导航一'],
            }
        },

        methods:{
            handleIconClick(ev) {
                console.log(ev);
            }
        },
    }
</script>

我们可以看一下主页现在的样子

这里面用到了一些ElementUI的组件,比如左侧的菜单栏,和右侧显示着“导航一”的面包屑组件等。使用el-row和el-col的作用是对组件进行响应式处理。这些组件的详细使用方法都可以在ElementUI的官方网站中找到。

配置路由信息

创建好了首页导航栏之后,我们需要对路由信息进行配置,vue-router是vuejs单页面应用的关键。在配置路由信息之前,我们先把需要跳转到的页面创建出来。我们首先在components目录下创建三个新组件:page1、page2和page3,分别在里面加入一行字,例如page1

<template>
    <div>
        这是第一个页面
    </div>
</template>
<script type="text/ecmascript-6">
    export default {
        data(){
            return {}
        }
    }
</script>

page2和page3分别写“这是第二个页面”、“这是第三个页面”。
这三个页面就代表了我们写的三个要跳转的页面。接下来我们使用

npm install vue-router --save

安装vue-router。
安装完成后,我们在src目录下创建一个新目录,名字为router,然后在router文件夹下建立一个javascript文件,名字为index.js,创建完毕后现在的目录结构为

这个router目录下的index.js就是vue-router的配置文件。我们在这个文件中加入如下代码:

import Vue from 'vue'
import VueRouter from 'vue-router'
import Page1 from '../components/Page1.vue'
import Page2 from '../components/Page2.vue'
import Page3 from '../components/Page3.vue'
Vue.use(VueRouter)

const router = new VueRouter({
    routes:[{
        path: '/Page1', component: Page1
    },{
        path: '/Page2', component: Page2
    },{
        path:'/Page3', component: Page3
    }]
})

export default router;

这里就是对跳转路径的配置。然后修改main.js

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-default/index.css'
import Navi from './components/Navi/Navi.vue'
import router from './router/index'

Vue.use(ElementUI)

new Vue({
  el: '#app',
  router,
  render: h => h(Navi)
})

这样我们的router就可以全局使用了。
接下来我们修改Navi.vue,
修改后的文件如下:

<template>
    <div style="background-color: #EBEBEB;min-height:800px">
        <div style="width:100%;background-color: #636363; overflow: hidden">
            <span class="demonstration" style="float:left;padding-top:10px;color:white;margin-left:1%">
                网站首页
            </span>
            <span class="demonstration" style="float:left;padding:5px;color:white;margin-left:2%;width:15%">
                <el-input
                        placeholder="请输入"
                        icon="search"
                        v-model="searchCriteria"
                        :on-icon-click="handleIconClick">
                </el-input>
            </span>
            <span class="demonstration" style="float:right;padding-top:10px;margin-right:1%">
                <el-dropdown trigger="click">
                  <span class="el-dropdown-link" style="color:white">
                    admin<i class="el-icon-caret-bottom el-icon--right"></i>
                  </span>
                  <el-dropdown-menu slot="dropdown">
                    <el-dropdown-item>个人信息</el-dropdown-item>
                    <el-dropdown-item>退出登录</el-dropdown-item>
                  </el-dropdown-menu>
                </el-dropdown>
            </span>
        </div>

        <div style="margin-top:5px">
            <el-row :gutter="10">
                <el-col :xs="4" :sm="4" :md="4" :lg="4">
                    <div>
                        <el-menu default-active="1" class="el-menu-vertical-demo" style="min-height:800px" @select="handleSelect">
                            <el-menu-item index="1"><i class="el-icon-message"></i>导航一</el-menu-item>
                            <el-menu-item index="2"><i class="el-icon-menu"></i>导航二</el-menu-item>
                            <el-menu-item index="3"><i class="el-icon-setting"></i>导航三</el-menu-item>
                        </el-menu>
                    </div>
                </el-col>
                <el-col :xs="20" :sm="20" :md="20" :lg="20">
                    <div>
                        <div style="border: 1px solid #A6A6A6; border-radius:6px; padding:5px; margin:2px; background-color: white">
                            <el-breadcrumb separator="/">
                                <el-breadcrumb-item v-for="item in breadcrumbItems">{{item}}</el-breadcrumb-item>
                            </el-breadcrumb>
                        </div>
                    </div>

                    <div style="margin-top:10px">
                        <router-view></router-view>
                    </div>
                </el-col>
            </el-row>
        </div>
    </div>
</template>
<script type="text/ecmascript-6">
    export default {
        data(){
            return {
                searchCriteria: '',
                breadcrumbItems: ['导航一'],
            }
        },

        methods:{
            handleIconClick(ev) {
                console.log(ev);
            },

            handleSelect(key, keyPath){
                switch(key){
                    case '1':
                        this.$router.push('/Page1');
                        this.breadcrumbItems  = ['导航一']
                        break;
                    case '2':
                        this.$router.push('/Page2')
                        this.breadcrumbItems  = ['导航二']
                        break;
                    case '3':
                        this.$router.push('/Page3')
                        this.breadcrumbItems  = ['导航三']
                        break;
                }
            },

        },
    }
</script>

注意文件中多了一个

<div style="margin-top:10px">
    <router-view></router-view>
</div>

这个router-view就是用来显示跳转的页面,也就是page1,page2和page3。我们给左侧的菜单栏添加了一个响应,在响应函数中作出了路由跳转的处理。this.$router.push('/Page1');这句话的意思就是将当前要跳转的页面push到router的数组中。这里使用push而不是直接给数组赋值的原因是希望用户点击浏览器中的后退和前进按钮时可以回到之前操作的页面。修改完成后我们可以看一下效果,注意浏览器地址栏的变化:

可以看到我们在点击左侧导航栏里面不同的条目时,浏览器地址栏里显示的地址作出了改变,右侧显示的文字也分别对应三个page组件。至此,一个可以进行路由跳转的主页就完成了。

结束语

在这篇文章中我们构建了自己的网站导航页,可以看出相对来说还是比较简单。在下一篇博客中我将会介绍各个跳转到的component的详细写法,以及组件化编程中各个组件的通信方法。

时间: 2024-09-17 04:28:03

从零开始搭建自己的VueJS2.0+ElementUI单页面网站(二、编写导航页)的相关文章

从零开始搭建自己的VueJS2.0+ElementUI单页面网站(一、环境搭建)

前言 VueJS可以说是近些年来最火的前端框架之一,越来越多的网站开始使用vuejs作为前端框架,vuejs轻量.简单的特性使得前端开发变得更加简易,而基于vuejs的前端组件库也越来越多.我们今天使用的ElementUI,是饿了么团队开发的一款基于vuejs的前端组件库,也是众多vuejs组件库里面比较优秀的一款.这里要说一下我们构建网站所需要用到的一些东西: NodeJS(npm) Webstorm (前端IDE) Nginx(后期用来转发请求到后台服务器) Eclipse(后台IDE) 正

单页面网站还能全页布局图与动画吗

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 提到单页面网站大多数站长都会想到图与动画,单页面网站一般都是卖一项服务或者产物,通过图与动画的宣传能够让用户更容易接受,而正是因为页面的单一性与内容的少数性制约了单页面网站的发展. 从最近百度搜索引擎的石榴算法我们可以看出,百度在为提升网站页面的质量做基础,而单页面网站的页面质量可谓一般,虽然没有过多的弹窗,但是其单页面的内容质量却并不怎么高

国外优秀的网站设计:创意大导航单页面网站设计

在国外优秀的设计网站中,开始流行一种这样的Web创意设计风格:整站由一个单一页面组成,通过设置锚点的方式,利用JavaScript技术,实现网站内容的滑动导航.这种创意十足的Web设计效果,可以很大程度上给人一种流畅华丽的动画震撼,沉醉于其美妙的操作设计的同时,更为网站设计者的构造灵感而折服,这里就为你搜集了10个创意大导航单页面网站设计. WeBleedDesign Gavin Castleton Two24Studios DesignSpam JP3Design MadeToKill Cla

单页面网站seo优化的基本要点

一个专业的网站建设者从来都不是与生俱来的,在苦练怎样建成一个好网站的过程中必定走过弯路,吃过苦头,对网站的架构.页面展示以及优化等各方面都需要精雕细琢,今天,我们就从seo的角度谈谈单页面网站建设的好处. 现在很多网站官网只有一个页面,之所以会出现单页面网站的方式,那么必然有它的优势所在,单页面网站相较于常见的网站来说,整个页面要复杂得多,在内容相同的前提下,将几个页面展示的内容全部归集到一个页面中,替代了整个网站. 从用户体验方面看,只要页面从上之下,从左至右的内容板块分类清晰,用户按照阅读习

对单页面网站seo的几点看法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 单页面站就是指网站中只有少数的几个页面,然后利用seo技术来做相关关键词的排名. 以前我做个几个单页面网站的seo实验,总结出一些自己的方法.(最近刚刚做的一个单页面站www.see001.com/caoliu.htm) 下面我来谈一下个人关于单页面网站seo的看法.(本人菜鸟,高手见笑了) 第一,单页面网站雏形时候不要过分seo优化. 我相

单页面网站应该如何才能够避免过度优化

摘要: 单页面网站作为一种最好体现营销策略和seo优化效果的方式,被很多人一直所应用,而且单页面网站在谷歌排名当中会有更加优异的表现.但是单页面网站优化也存在着很多的弊端,比 单页面网站作为一种最好体现营销策略和seo优化效果的方式,被很多人一直所应用,而且单页面网站在谷歌排名当中会有更加优异的表现.但是单页面网站优化也存在着很多的弊端,比如要增加关键词密度,就涉及到关键词的积累,甚至还很容易造成过度优化,在搜索引擎表现不友好,很容易被惩罚.但是也有单页面网站优化的非常成功的真实案例存在. 那么

推荐7款超棒的单页面网站设计模板 关键是免费!

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 之前我们推荐过Bootstrap的实用开发教程和8款HTML5实现的特效和应用,反映非常强烈,很多前端爱好者纷纷要求多分享些类似的教程和模板.今天我们推荐的这7套单页面网站设计模板不仅带有独立的在线演示,并且全部免费下载!如果你也喜欢我们的素材教程,请加入我们的极客标签吧! 响应式的单页面网站模板 - Brushed Brushed 是一款单

老站长对单页面网站的销量提升的几个观点

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 越来越多的人看到单页面网站的优势:内容直接.建站简单.易运营.易优化推广.销售能力强.的确,单页面网站对用户的吸引力是显而易见的,销售能力甚至不亚于一些大量的复杂的电子商务网站.但是同样因为单页面的这些优势,也同时导致了单页面网站竞争更加激烈.各站对于销量提升的强烈要求让笔者有了一些想法,分享给大家,希望有所收获! 促销策略的应用 促销在销售

JSP单页面网站文件管理器

js|页面 这个文件的开发的设计思想是这样的.有的web 网站,或者B/S 软件的客户,在软件的安装调试阶段,往往对某些细节有特殊要求,也许,是字体的调整,也许是界面方面的小改动意见.面对这样的情况,如果用户没有开放FTP 功能,则开发和维护人员往往就必须亲临现场做一些很小的调试工作. 即浪费了时间,也浪费了人力物力. 在这样的情况下,我开发了这个具有文件管理功能的 JSP 单页面文件.它提供了文件夹的新增,更名,删除:文件的修改,更名,删除和上传的功能.基本能满足在软件的安装调试阶段,小的修改