【VUE项目实战】9、创建登录组件并绘制布局

接上篇《8、登录与退出功能开发准备(二)
上一篇讲解了登录模块的开发的前置准备工作,本篇来正式开发登录模块。

一、创建登录组件并渲染

下面我们创建一个根组件,并将根组件渲染到App根组件中。
打开vscode编辑器,打开“components”文件夹,新建一个名为“Login.vue”的登录组件:

一个完整的vue组件包含“结构”、“行为”和“样式”,我们将这三块编写上去:

<template>
   <div>
     登录组件 
   </div> 
</template>

<script>
export default {}
</script>

<!-- 支持less语法格式,scoped代表样式只在本组件起作用 -->
<style lang="less" scoped>

</style>

大家注意这里的scoped,一般一个组件的样式是自己定义的,不会去定义其他组件的样式,如果我们创建的是一个单文件的vue组件,建议大家都加上scoped标识,防止组件之间的样式冲突。
注:使用less语法,需要安装less-loader和less两个依赖。

然后我们需要在router路由的配置文件中,为Login.vue绑定路由,以便我们可以访问到该页面。打开“router/index.js”,添加以下内容:

import Vue from 'vue'
import VueRouter from 'vue-router'
import Login from '../components/Login.vue' //引用Login组件

Vue.use(VueRouter)

const routes = []

const router = new VueRouter({
  routes:[
    {path:'/login',component:Login} //定义访问页面的路由地址
  ]
})

export default router

有了路由配置后,紧接着我们需要把Login组件渲染到App根组件中,因为App组件是系统的入口,想要显示子组件就需要在App根组件上渲染它。
我们在App根组件的结构区域,添加路由占位符,用来展示地址栏上的路由组件内容:

<template>
  <div id="app">
    <!-- 路由占位符 -->
    <router-view></router-view>
  </div>
</template>

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

<style>
</style>

注:如果报“Extra semicolon”的错误,是因为 eslint 的语法监测检查了分号,我觉得不让用空格和分号有点变态,决定把这个校验关闭。在“.eslintrc.js”配置文件中将所有rule删除即可:

module.exports = {
  root: true,
  env: {
    node: true
  },
  extends: [
    'plugin:vue/essential'
    //'@vue/standard'  这个也要删除
  ],
  parserOptions: {
    parser: 'babel-eslint'
  },
  rules: {
    //一个不要留
  }
}

此时我们访问login地址,就可以在根组件上看到渲染的Login组件内容:

当我们访问默认地址时,是一片空白:

 我们可以指定默认空路径的时候,访问login地址,在路由规则中添加一个重定向的规则:

const router = new VueRouter({
  routes:[
    {path:'/',redirect:'/login'},
    {path:'/login',component:Login} //定义访问页面的路由地址
  ]
})

然后我们直接访问“http://localhost:8080/#/”的时候,就会自动跳转“http://localhost:8080/#/login”。

二、构建登录组件的布局

1、给登录组件添加背景色
 

<template>
  <div class="login_container">
      登录组件
  </div>
</template>

<script>
export default {};
</script>

<!-- 支持less语法格式,scoped代表样式只在本组件起作用 -->
<style lang="less" scoped>
  .login_container{
      background-color: #2b4b6b;
      height: 100%;
  }
</style>

此时效果:

 我们想让这个颜色沾满全屏,此时需要创建一个全局样式表,在“assets”下创建“css/global.css”作为全局文件:

 样式内容为:

/* 全局样式表 */
html,
body,
#app{
    height: 100%;
    margin: 0;
    padding: 0;
}

设置html、body以及app的组件高度都为100%,内外边距都是0。
然后在入口文件mian.js导入全局样式:

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import './plugins/element.js'
//导入全局样式表
import './assets/css/global.css'

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

效果:

 然后我们绘制登录的白色盒子:

<template>
  <div class="login_container">
    <div class="login_box"></div>
  </div>
</template>

<script>
export default {};
</script>

<!-- 支持less语法格式,scoped代表样式只在本组件起作用 -->
<style lang="less" scoped>
  .login_container{
      background-color: #2b4b6b;
      height: 100%;
  }
  .login_box{
      width: 450px;
      height: 300px;
      background-color: #fff;
      border-radius: 3px;//圆角效果
  }
</style>

这里添加了一个类名为“login_box”的div,并绘制了样式,效果为:

此时我们还需要让这个盒子上下左右居中,我们修改样式,进行绝对定位,距离左侧和上测都是50%,界面位移在横轴和纵轴都移动-50%:

.login_box{
    width: 450px;
    height: 300px;
    background-color: #fff;
    border-radius: 3px;//圆角效果
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%,-50%);
}

效果:

然后我们绘制一下登录页面那个圆形的头像组件。在template区域的白色盒子里面,再加一个样式名为“avatar_box”的组件:

<template>
  <div class="login_container">
    <div class="login_box">
        <div class="avatar_box">
            <img src="../assets/logo.png" alt=""/>
        </div>
    </div>
  </div>
</template>

<script>
export default {};
</script>

<!-- 支持less语法格式,scoped代表样式只在本组件起作用 -->
<style lang="less" scoped>
  .login_container{
      background-color: #2b4b6b;
      height: 100%;
  }
  .login_box{
      width: 450px;
      height: 300px;
      background-color: #fff;
      border-radius: 3px;//圆角效果
      position: absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50%,-50%);
      //less语法的嵌套
      .avatar_box{
          height: 130px;
          width: 130px;
          background-color: #fff;
          border: 1px solid #eee;//加个灰色边框
          border-radius: 50%;//div组件变成圆形
          padding: 10px;//图片和边框之间有10px间隙
          box-shadow: 0 0 10px #ddd;//添加一个阴影,向外扩散10像素
          //头像居中,向左移动box的50%,再向右移动自身的-50%,向上移动该组件高度的-50%,
          position: absolute;
          left: 50%;
          transform: translate(-50%,-50%);
          img{
            height: 100%;
            width: 100%;
            border-radius: 50%;//图片变成圆形
            background-color: #eee;
          }
      }
  }
  
</style>

效果:

下一篇我们继续编写账号密码填写的表单样式。

参考:黑马程序员(www.itheima.com)Vue项目实战教学视频

转载请注明出处:http://blog.csdn.net/acmman/article/details/119482872

Guess you like

Origin blog.csdn.net/u013517797/article/details/119482872