加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

基于Vue2.0+Vue-router构建一个简单的单页应用

发布时间:2020-12-16 23:22:29 所属栏目:百科 来源:网络整理
导读:爱编程爱分享,原创文章,转载请注明出处,谢谢! 一、介绍 vue.js 是 目前 最火的前端框架, vue.js 兼具 angular.js 和 react.js 的优点,并剔除它们的缺点 的周边配套工具 如vue-router 、vue-resource 、vuex等等 ? 通过他们我们可以很轻松的构建一个大

爱编程爱分享,原创文章,转载请注明出处,谢谢!

一、介绍

vue.js 是 目前 最火的前端框架,vue.js 兼具 angular.js 和 react.js 的优点,并剔除它们的缺点
的周边配套工具 如vue-router 、vue-resource 、vuex等等 ?
通过他们我们可以很轻松的构建一个大型单页应用

二、环境搭建

我们使用vue-cli脚手架工具构建

#安装 vue-cli

npm install -g vue-cli

使用vue-cli初始化项目

vue init webpack?vue-vuerouter-demo

进到目录

cd?

安装依赖 ??

npm install

开始运行 ?

npm run dev

浏览器访问http://localhost:8080

构建完成之后基本目录结构如下:

流程说明:

1、首先会打开首页 也就是我们看到的index.html文件

2、使用webpack打包之后默认加载main.js文件并将其引入到index.html文件中?

三、开发

我们在main.js文件中引入相关模块以及组件

import Vue from 'vue''./App''./router'

<span style="color: #008000">//<span style="color: #008000"> 引入并使用vue-resource网络请求模块
import VueResource from 'vue-resource'<span style="color: #000000">
Vue.use(VueResource)

实例化vue对象配置选项路由及渲染App组件

'#app', =><span style="color: #008000">//<span style="color: #008000"> 这里的render: h => h(App)是es6的写法
<span style="color: #008000">//
<span style="color: #008000"> 转换过来就是: 暂且可理解为是渲染App组件

<span style="color: #008000">//
<span style="color: #008000"> render:(function(h){
<span style="color: #008000">//<span style="color: #008000"> return h(App);
<span style="color: #008000">//<span style="color: #008000"> });
<span style="color: #000000">
})

App.vue文件是我们的组件入口,之后所有的开发在这里面进行

默认会被渲染成一个 `` 标签 <Home <About ?

<span style="color: #0000ff"><<span style="color: #800000">script<span style="color: #0000ff">>
<span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000"> import Hello from './components/Hello'
<span style="background-color: #f5f5f5; color: #000000">
export <span style="background-color: #f5f5f5; color: #0000ff">default<span style="background-color: #f5f5f5; color: #000000"> {
name: <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">app<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">,components: {
<span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000"> Hello
<span style="background-color: #f5f5f5; color: #000000"> }
}
<span style="color: #0000ff"></<span style="color: #800000">script<span style="color: #0000ff">>

<span style="color: #0000ff"><<span style="color: #800000">style<span style="color: #0000ff">><span style="background-color: #f5f5f5; color: #800000">
body<span style="background-color: #f5f5f5; color: #000000">{<span style="background-color: #f5f5f5; color: #ff0000">
background-color<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> #f8f8ff<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
font-family<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 'Avenir',sans-serif<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
color<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> #2c3e50<span style="background-color: #f5f5f5; color: #000000">;
<span style="background-color: #f5f5f5; color: #000000">}<span style="background-color: #f5f5f5; color: #800000">

.nav<span style="background-color: #f5f5f5; color: #000000">{<span style="background-color: #f5f5f5; color: #ff0000">
position<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> fixed<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
width<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 108px<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
left<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 40px<span style="background-color: #f5f5f5; color: #000000">;
<span style="background-color: #f5f5f5; color: #000000">}<span style="background-color: #f5f5f5; color: #800000">
.nav ul<span style="background-color: #f5f5f5; color: #000000">{<span style="background-color: #f5f5f5; color: #ff0000">
list-style<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> none<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
margin<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 0<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
padding<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 0<span style="background-color: #f5f5f5; color: #000000">;
<span style="background-color: #f5f5f5; color: #000000">}<span style="background-color: #f5f5f5; color: #800000">
.nav ul li<span style="background-color: #f5f5f5; color: #000000">{<span style="background-color: #f5f5f5; color: #ff0000">
width<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 108px<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
height<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 48px<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
line-height<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 48px<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
border<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff">1px solid #dadada<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
text-align<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> center<span style="background-color: #f5f5f5; color: #000000">;
<span style="background-color: #f5f5f5; color: #000000">}<span style="background-color: #f5f5f5; color: #800000">
.nav ul li a<span style="background-color: #f5f5f5; color: #000000">{<span style="background-color: #f5f5f5; color: #ff0000">
text-decoration<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> none<span style="background-color: #f5f5f5; color: #000000">;
<span style="background-color: #f5f5f5; color: #000000">}<span style="background-color: #f5f5f5; color: #800000">

.main<span style="background-color: #f5f5f5; color: #000000">{<span style="background-color: #f5f5f5; color: #ff0000">
height<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 400px<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
margin-left<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 180px<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
margin-right<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 25px<span style="background-color: #f5f5f5; color: #000000">;
<span style="background-color: #f5f5f5; color: #000000">}

<span style="color: #0000ff"></<span style="color: #800000">style<span style="color: #0000ff">>

要使用路由我们首先要在router/index.js文件中创建路由并配置路由映射 ,并通过export输出router到main.js文件中

<span style="color: #008000">//<span style="color: #008000"> 引入路由模块并使用它
import Vue from 'vue'<span style="color: #000000">
import VueRouter from 'vue-router'<span style="color: #000000">
Vue.use(VueRouter)

<span style="color: #008000">//<span style="color: #008000"> 创建路由实例并配置路由映射 <span style="color: #008000">
//<span style="color: #008000"> path:'',redirect:'/home' 重定向到path是/home的映射
const router = <span style="color: #0000ff">new<span style="color: #000000"> VueRouter({
routes:[{
path: '/home',component: require('../components/Home.vue'<span style="color: #000000">)
},{
path: '/about',component: require('../components/About.vue'<span style="color: #000000">)
},{
path:'
',redirect:'/home'<span style="color: #000000">
}]
})

<span style="color: #008000">//<span style="color: #008000"> 输出router
export <span style="color: #0000ff">default router;

上面配置了2个组件映射 分别Hme.vue组件和About组件,配置好之后我们就可以开始使用路由了

默认会被渲染成一个 `` 标签 <Home <About

点击home和about导航会映射到对应的组件,然后将组件渲染在这里面

到此,整个流程我们已经走通了。

接下来我们使用vue-resource网络插件动态加载数据并显示出来

1、先在main.js文件中引入并使用vue-resource网络请求模块

import VueResource from 'vue-resource'

2、创建Home.vue组件

我们需要在created钩子函数中去请求网络,这里我们使用豆瓣的API去请求电影列表数据,请求成功之后我们将其数据显示到页面中

<div class="cnblogs_code">


  
    {{ msg }}
    
      
      <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;div </span><span style="color: #ff0000"&gt;class</span><span style="color: #0000ff"&gt;="m-img inl-block"</span><span style="color: #0000ff"&gt;><</span><span style="color: #800000"&gt;img </span><span style="color: #ff0000"&gt;v-bind:src</span><span style="color: #0000ff"&gt;="article.images.small"</span><span style="color: #0000ff"&gt;/></</span><span style="color: #800000"&gt;div</span><span style="color: #0000ff"&gt;></span>
   <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;div </span><span style="color: #ff0000"&gt;class</span><span style="color: #0000ff"&gt;="m-content inl-block"</span><span style="color: #0000ff"&gt;></span>
      <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;div</span><span style="color: #0000ff"&gt;></span>{{article.title}}<span style="color: #0000ff"&gt;</</span><span style="color: #800000"&gt;div</span><span style="color: #0000ff"&gt;></span>
    <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;div</span><span style="color: #0000ff"&gt;></span>年份:{{article.year}}<span style="color: #0000ff"&gt;</</span><span style="color: #800000"&gt;div</span><span style="color: #0000ff"&gt;></span>
     <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;div</span><span style="color: #0000ff"&gt;></span>类型:{{article.subtype}}<span style="color: #0000ff"&gt;</</span><span style="color: #800000"&gt;div</span><span style="color: #0000ff"&gt;></span>
   <span style="color: #0000ff"&gt;</</span><span style="color: #800000"&gt;div</span><span style="color: #0000ff"&gt;></span>
  <span style="color: #0000ff"&gt;</</span><span style="color: #800000"&gt;li</span><span style="color: #0000ff"&gt;></span>
<span style="color: #0000ff"&gt;</</span><span style="color: #800000"&gt;ul</span><span style="color: #0000ff"&gt;></span>

<span style="color: #0000ff"></<span style="color: #800000">div<span style="color: #0000ff">>
<span style="color: #0000ff"></<span style="color: #800000">template<span style="color: #0000ff">>

<span style="color: #0000ff"><<span style="color: #800000">script<span style="color: #0000ff">>

<span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000"> mounted 钩子函数 这里去请求豆瓣数据
<span style="background-color: #f5f5f5; color: #000000">
export <span style="background-color: #f5f5f5; color: #0000ff">default<span style="background-color: #f5f5f5; color: #000000"> {
name: <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">home<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">,data () {
<span style="background-color: #f5f5f5; color: #0000ff">return<span style="background-color: #f5f5f5; color: #000000"> {
msg: <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">电影列表<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">,articles:[]
}
},created:<span style="background-color: #f5f5f5; color: #0000ff">function<span style="background-color: #f5f5f5; color: #000000">(){ <span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000">这里mounted和created生命周期函数区别
<span style="background-color: #f5f5f5; color: #0000ff">this<span style="background-color: #f5f5f5; color: #000000">.$http.jsonp(<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">https://api.douban.com/v2/movie/top250?count=10<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">,{},{
headers: {

    },emulateJSON: </span><span style="background-color: #f5f5f5; color: #0000ff"&gt;true</span><span style="background-color: #f5f5f5; color: #000000"&gt;
}).then(</span><span style="background-color: #f5f5f5; color: #0000ff"&gt;function</span><span style="background-color: #f5f5f5; color: #000000"&gt;(response) {
  </span><span style="background-color: #f5f5f5; color: #008000"&gt;//</span><span style="background-color: #f5f5f5; color: #008000"&gt; 这里是处理正确的回调</span>

<span style="background-color: #f5f5f5; color: #000000"> console.log(response);
<span style="background-color: #f5f5f5; color: #0000ff">this<span style="background-color: #f5f5f5; color: #000000">.articles <span style="background-color: #f5f5f5; color: #000000">=<span style="background-color: #f5f5f5; color: #000000"> response.data.subjects
<span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000"> this.articles = response.data["subjects"] 也可以
<span style="background-color: #f5f5f5; color: #000000">
},<span style="background-color: #f5f5f5; color: #0000ff">function<span style="background-color: #f5f5f5; color: #000000">(response) {
<span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000"> 这里是处理错误的回调
<span style="background-color: #f5f5f5; color: #000000"> console.log(response)
});
}
}
<span style="color: #0000ff"></<span style="color: #800000">script<span style="color: #0000ff">>

<span style="color: #008000">
<span style="color: #0000ff"><<span style="color: #800000">style <span style="color: #ff0000">scoped<span style="color: #0000ff">><span style="background-color: #f5f5f5; color: #800000">
ul<span style="background-color: #f5f5f5; color: #000000">{<span style="background-color: #f5f5f5; color: #ff0000">
list-style<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> none<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
margin<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 0<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
padding<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 0<span style="background-color: #f5f5f5; color: #000000">;
<span style="background-color: #f5f5f5; color: #000000">}<span style="background-color: #f5f5f5; color: #800000">
ul li<span style="background-color: #f5f5f5; color: #000000">{<span style="background-color: #f5f5f5; color: #ff0000">
border-bottom<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 1px solid #999<span style="background-color: #f5f5f5; color: #000000">;<span style="background-color: #f5f5f5; color: #ff0000">
padding<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 10px 0<span style="background-color: #f5f5f5; color: #000000">;
<span style="background-color: #f5f5f5; color: #000000">}<span style="background-color: #f5f5f5; color: #800000">

.inl-block<span style="background-color: #f5f5f5; color: #000000">{<span style="background-color: #f5f5f5; color: #ff0000">
display<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> inline-block<span style="background-color: #f5f5f5; color: #000000">;
<span style="background-color: #f5f5f5; color: #000000">}<span style="background-color: #f5f5f5; color: #800000">

.m-img<span style="background-color: #f5f5f5; color: #000000">{

<span style="background-color: #f5f5f5; color: #000000">}<span style="background-color: #f5f5f5; color: #800000">
.m-content<span style="background-color: #f5f5f5; color: #000000">{<span style="background-color: #f5f5f5; color: #ff0000">
margin-left<span style="background-color: #f5f5f5; color: #000000">:<span style="background-color: #f5f5f5; color: #0000ff"> 20px<span style="background-color: #f5f5f5; color: #000000">;
<span style="background-color: #f5f5f5; color: #000000">}
<span style="color: #0000ff"></<span style="color: #800000">style<span style="color: #0000ff">>

3、最后我们运行npm run dev命令查看页面显示效果

OK,可以看到我们的数据成功加载出来了,可以点击左侧的导航来进行导航内容切换

代码我已经上传到github上面去了,想看的童鞋去上面看,喜欢的话可以给个Star哦~

Github地址 https://github.com/fozero/vue-vuerouter-demo

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读