Vue基础(五)

Vue Router

我们之前在Vue学了:

视图层——页面元素显示(template,slot,指令);数据(data);监听(el,v-on指令,methods)

Vue遵守关注度分离原则,所以只关注视图层!


前后端交互——Axios

项目脚手架——vue-cli

打包工具——webpack


有了这些,我们的前端页面仍然是单页面。因为页面都是vue组件写的,页面间的跳转没有东西实现,所以就出来了vue router路由进行页面跳转!。并且有了vue组件后,拼接显示也需要路由实现。

Vue Router做的就是类似于后端 @RequestMapping的工作!


Vue Router的作用:

  1. 用于vue组件间跳转(就是页面跳转)使用【< router-link to="/content" >< /router-link >】
  2. 用于vue组件中子组件的显示。使用【< router-view >< /router-view >】
  3. 作了类似于 @RequestMapping 的工作


其包含的功能有:

  • 嵌套的路由/视图表
  • 模块化的、基于组件的路由配置
  • 路由参数、查询、通配符
  • 基于Vue.js过渡系统的视图过渡效果
  • 细粒度的导航控制
  • 带有自动激活的CSS class 的链接
  • HTML5历史模式或hash模式,在IE9中自动降级
  • 自定义的滚动条行为

安装vue router

vue-router 是一个插件包,所以我们还是需要使用cpm、cnpm来进行安装。打开命令行工具,进入你的项目目录,输入下面命令。

npm install vue-router --save-dev

这样就将 vue-router 安装到了项目中的【node_modules】中了。所以我们可以看出每次项目都要安装一次


定义两个组件

自定义两个个组件Content.vueHome.vue 实现这两个页面的跳转

<template>
    <h1>内容页</h1>
</template>

<script>
    export default {
        name: "Content"
    }
</script>

<style scoped>

</style>
<template>
    <h1>Home</h1>
</template>

<script>
    export default {
        name: "Home"
    }
</script>

<style scoped>

</style>

配置路由

在这里插入图片描述

这里的index只是router的入口脚本,每个插件都要写一个入口脚本。只是这么叫的,要区分开和index.html的区别!

import Vue from 'vue'
import VueRouter from 'vue-router'
import Content from '../components/Content'
import Home from '../components/Home'

// 安装路由
Vue.use(VueRouter);
Vue.use(Home)

// 配置导出路由
export default new VueRouter({
    
    
  // 配置两个路由
  routes: [
    // 一个路由,用于跳转到content组件
    {
    
    
      // 路由的路径, 通过路由的访问路径跳转到相应的组件
      path: '/content',
      name: 'content',
      // 跳转的组件
      component: Content
    },
    // 另一个路由用于跳到home组件
    {
    
    
      path: '/home',
      name: 'home',
      component: Home
    }
  ]
})

导入路由

将路由导入 main.js 因为程序的入口文件时它,导入它才能使用

import Vue from 'vue'
import App from './App'
import router from './router' //不用具体到index,因为index是作为它约定的入口文件。所以写成这样它会自动扫描里面的路由配置


Vue.config.productionTip = false


/* eslint-disable no-new */
new Vue({
    
    
  el: '#app',
  // 配置路由,把路由放进入就会自动配置路由
  router,
  components: {
    
     App },
  template: '<App/>'
})

使用路由

<template>
  <div id="app">
    <!--使用link进行请求跳转-->
    <router-link to="/home">首页</router-link>
    <router-link to="/content">内容页</router-link>
    <!--使用view进行显示,否则跳转的组件不会显示-->
    <router-view></router-view>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld'
import Content from './components/Content'

export default {
  name: 'App',
  components: {
    HelloWorld,
    Content
  }
}
</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>



自定义一个vue组件(使用vue文件)

Content.vue

<template>
    <h1>内容页</h1>
</template>

<script>
    export default {
        name: "Content"
    }
</script>

<style scoped>

</style>

在另一个组件 App.vue 中引用

<template>
  <div>
    <img src="./assets/logo.png">
    <HelloWorld/>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld'
import Content from './components/Content'

export default {
  name: 'App',
  components: {
    HelloWorld,
    Content
  }
}
</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>

Vue练习

使用ElementUI进行前端项目练习。

要install的这些东西如果之前没有放在npm环境中,就要重新进行下载。如果之前下载过了,使用命令会直接将下载在npm环境中的插件安装到项目中!


  1. 重新按照之前通过 vue-cli 构建一个vue的webpack项目

  2. 安装各种插件(要先进入项目目录)

    # 安装 vue-router
    npm install vue-router --save-dev
    
    # 安装 element-ui
    npm i element-ui -S
    
    # 安装所有的依赖
    npm install
    
    # 安装 SASS 加载器,在这里安装的是两个东西
    cnpm install sass-loader node-sass --save-dev
    
    # 启动程序测试
    npm run dev
    

vue项目的目录结构:(这只是一部分,其余部分都会生成)
在这里插入图片描述

  • src:源文件

    • App.vue:主组件,用于外部 index.html 中使用
    • assets:存放图片
    • components:存放行为组件
    • views:存放视图组件
    • router:存放路由
    • main.js:程序的主入口,打包时从这里进入。
  • static:静态资源(例如Layui等框架)

写代码

文件以及结构如图
在这里插入图片描述

Login.vue

使用的是ElementUI中的表单

<template>
  <div>
    <el-form ref="form" :model="form" label-width="80px">
      <el-form-item label="活动名称">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label="活动区域">
        <el-select v-model="form.region" placeholder="请选择活动区域">
          <el-option label="区域一" value="shanghai"></el-option>
          <el-option label="区域二" value="beijing"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="活动时间">
        <el-col :span="11">
          <el-date-picker type="date" placeholder="选择日期" v-model="form.date1" style="width: 100%;"></el-date-picker>
        </el-col>
        <el-col class="line" :span="2">-</el-col>
        <el-col :span="11">
          <el-time-picker placeholder="选择时间" v-model="form.date2" style="width: 100%;"></el-time-picker>
        </el-col>
      </el-form-item>
      <el-form-item label="即时配送">
        <el-switch v-model="form.delivery"></el-switch>
      </el-form-item>
      <el-form-item label="活动性质">
        <el-checkbox-group v-model="form.type">
          <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
          <el-checkbox label="地推活动" name="type"></el-checkbox>
          <el-checkbox label="线下主题活动" name="type"></el-checkbox>
          <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
        </el-checkbox-group>
      </el-form-item>
      <el-form-item label="特殊资源">
        <el-radio-group v-model="form.resource">
          <el-radio label="线上品牌商赞助"></el-radio>
          <el-radio label="线下场地免费"></el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="活动形式">
        <el-input type="textarea" v-model="form.desc"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="onSubmit">立即创建</el-button>
        <el-button>取消</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        form: {
          name: '',
          region: '',
          date1: '',
          date2: '',
          delivery: false,
          type: [],
          resource: '',
          desc: ''
        }
      }
    },
    methods: {
      onSubmit() {
        console.log('submit!');
      }
    }
  }
</script>

<style lang="scss" scoped>
  .login-box{
    border: 1px solid #DCDFE6;
    width: 350px;
    margin:180px auto;
    padding:35px 35px 15px 35px;
    border-radius: 5px;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    box-shadow:0 0 25px #909399;
  }

  .login-title{
    text-align:center;
    margin:0 auto 40px auto;
    color:#303133;
  }
</style>

Main.vue

<template>
    <h1>主页</h1>
</template>

<script>
    export default {
        name: "Main"
    }
</script>

<style scoped>

</style>

index.js(注册路由)

import Vue from 'vue'
import VueRouter from 'vue-router'

import Main from '../views/Main'
import Login from '../views/Login'

Vue.use(VueRouter);

export default new VueRouter({
    
    
  routes: [
    {
    
    
      path: '/login',
      component: Login
    },
    {
    
    
      path: '/main',
      component: Main
    }
  ]
})

main.js(使用路由与ElementUI)

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

import router from './router'

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.config.productionTip = false
Vue.use(router);
Vue.use(ElementUI);


/* eslint-disable no-new */
new Vue({
    
    
  el: '#app',
  router,
  render: h => h(App)
})

App.vue(主组件)

<template>
  <div id="app">
    <router-link to="/login">login</router-link>
    <router-view></router-view>
  </div>
</template>

<script>


export default {
  name: 'App'
}
</script>

路由传递参数(三步)

之前我们使用路由进行组件跳转并没有传递参数。但在实际开发中我们的链接可能是需要传递参数的,所以有了路由传递参数的实现方法。

之前我们路由进行组件跳转用的是如下标签:

<router-link to="/main"></router-link>
  1. 在这个跳转的标签中还可以添加参数,例如:
<!--name中找到是组件-->
<router-link v-bind:to="{name:'Main', params:{id:1, name:'xxx'}}"></router-link>

类似于Restful风格,除了在使用时添加参数外还需要再@RequestMapping中添加参数!

  1. 所以要在路由中定义接收参数的信息!
import Vue from 'vue'
import VueRouter from 'vue-router'

import Main from '../views/Main'
import Login from '../views/Login'

Vue.use(VueRouter);

export default new VueRouter({
    
    
  routes: [
    {
    
    
      path: '/login',
      component: Login
    },
    {
    
    
      path: '/main/:id/:name',
      component: Main
    }
  ]
})
  1. 使用参数,显示

    注意 template 中只能放标签。不像html可以放一些字符啥的

<template>
    <h1>主页{
   
   {$router.params.id}}</h1>
	<!--此处代码用于显示,从路由中取出-->
</template>

<script>
    export default {
        name: "Main"
    }
</script>

<style scoped>

</style>

猜你喜欢

转载自blog.csdn.net/qq_43477218/article/details/114893409
今日推荐