Skip to content

Vue-CLI2 中的 Vue-Router 和 Vue-Resource 实战

简单记录一下这两个插件的使用方法,写了一个demo,方便理解及应用。

(一)安装vue-cli2.x脚手架

如果还没安装的,或安装过程不熟的,可以参考这篇文章教程,写的很详细——Vue2.0史上最全入坑教程(上)—— 搭建Vue脚手架(vue-cli),这个文章作者真的很用心,向他学习。

(二)安装vue-router和vue-resource插件

如果在安装脚手架的时候安装了vue-router,可以直接跳转到安装vue-resource。 如果不是的,可以使用命令:cd <项目文件夹> 切换到项目文件夹路径下,然后使用命令行安装:npm install vue-router --savenpm install vue-resource --save

这里说明一下安装npm install 插件 +[参数],表示的意思: 1.使用:npm install 插件 :会把这个插件安装到node_modules目录中,但不会修改package.json内容;

2.npm install 插件 --save :在项目发布上线之后还会依赖用到的插件,没有这个插件,项目不能正常的运行,自动更改package.json内容 ;

3.npm install 插件 --save-dev :把插件安装到开发依赖中,项目上线之后不会用到的插件,针对个别插件,比如说这个“babel-loader”,是在项目编译解析完成后发布就没用到了的,自动更改package.json内容;

(三)使用vue-router+vue-resource写一个跳转请求页面数据的demo

1.先看一下安装脚手架的时候安装的路由界面及配置:

2.如果一开始没有的安装vue-router后自己手动安装的,可以参考这个main.js 和router文件夹的index.js配置的配置代码如下: main.js代码:

import Vue from 'vue'
import App from './App'
import router from './router'//引入路由指定文件

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,//实例化,表示会使用
  render: h => h(App)//vue2.0写法

  //以下是vue1.0的写法
  //components: { App },//注册组件信息
 // template: '<App/>'//简写的模板调用组件的标签
})

如果对代码中的render: h => h(App)//vue2.0写法 不理解的可以查看我之前写的文章——vue-cli2.x中的render: h => h(App)解析

router文件夹的index.js代码:

import Vue from 'vue'
import Router from 'vue-router'//引入路由配置的模块
import HelloWorld from '@/components/HelloWorld'//引入需要路由转址的路径
import Home from '@/components/Home'//引入需要路由转址的路径
import VueResource from 'vue-resource'//引入vue-resource插件http请求
//下面这种方法引用也可以
// import HelloWorld from '../components/HelloWorld'//引入需要路由转址的路径
// import Home from '../components/Home'//引入需要路由转址的路径

Vue.use(Router)//声明引用,全局使用
Vue.use(VueResource)//声明引用,全局使用

export default new Router({

  // 注意当有多个路由的时候默认使用第一个路由地址
  routes: [//注意routers是一个对象数组
    {//需要跳转的组件需要import引进
      path: '/',//路由的地址,此时表示根路径
      name: 'HelloWorld',
      component: HelloWorld
    },
    {//需要跳转的组件需要import引进
      //路由的地址,此时表示根路径。注意第二个路由地址这里需要添加上组件名
      path: '/Home',
      name: 'Home',
      component: Home
    }
  ],
  mode:"history"//去掉url链接中的#符号
})

3.添加一个组件Home.vue,添加位置如下:

组件代码为:

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    test
    <p>以下是获取http请求的数据内容</p>
    <ul>
        <li v-for="user in users">{{user.id}}. {{user.name}}</li>
    </ul>
  </div>
</template>

<script>
export default {
  name: 'home',
  data () {
    return {
      users:[],
      msg: 'hello Home'
    //   使用网络接口
    }
  },
  created(){
    //   http请求,请求成功调用.then()函数,并将数据传给data
      this.$http.get("http://jsonplaceholder.typicode.com/users").then((data)=>{
        //   console.log(data);//请求成功的数据
        this.users=data.body;//将data数据的的body内容复制给定义的users数据
      })
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>

</style>

4.需要在根组件App.vue下添加一下引入组件的内容:

<template>
  <div id="app">
    <img src="./assets/logo.png">
    <!--注意a标签会重新加载页面,相当于刷新页面-->
    <ul>
      <p>--注意a标签会重新加载页面,相当于刷新页面--</p>
      <li><a href="/">HelloWorld</a></li>
      <li><a href="/Home">Home</a></li>
      <p>此处使用router-link,不会刷新页面,相当于局部刷新</p>
      <li><router-link to="/">HelloWorld</router-link></li>
      <li><router-link to="/Home">Home页面</router-link></li>
    </ul>
    <router-view/>
  </div>
</template>

<script>
export default {
  name: 'App'
}
</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;
}
</style>

(四)运行结果