Vue 学习随笔五 - 简单项目设计

学一门技术的最好方法是用这个技术去做一件事情,现在规划一下我们这个DEMO的简单需求。

概述:做一个后台系统,实现简单的实体CRUD,以及跟前台的交互功能。

UI:集成Bootstrap样式,实现简单后台的框架

后台:Springboot,使用Kotlin开发

需求:User的CRUD,User包括子类Car

就这么简单的功能,主要是用来学习VUE+Kotlin。

第一步:集成Bootstrap,毕竟不会做样式,真实项目有UI去操作,我们目前只需要简单的使用现成的框架即可。

1. 安装Bootstrap,在CMD(项目当前路径,推荐使用webstrom 的 Terminal)中执行,cnpm install bootstrap;

2. 在项目的src/main.js 中添加以下代码,这些引用会在全局有效:

import BootstrapVue from ‘bootstrap-vue‘
import ‘bootstrap/dist/css/bootstrap.css‘
import ‘bootstrap-vue/dist/bootstrap-vue.css‘
Vue.use(BootstrapVue)

3. 配置项目的header,menu

  后台系统都是有导航的,我们第一步简单的在App.vue中进行设置,具体步骤如下:

  1. 在src/layouts/目录中添加 header.vue,sidebar.vue文件,代码如下,参考了vue-bootstrap项目,各位可上github搜索查看。

<template>
  <b-navbar
    toggleable="md"
    class="navbar-dark bd-navbar"
    sticky>
    <b-navbar-toggle target="bd-main-nav"/>
    <b-navbar-brand
      to="/"
      exact>
      <svg
        class="d-block"
        width="36"
        height="36"
        viewBox="0 0 612 612"
        xmlns="http://www.w3.org/2000/svg"
        focusable="false"
        fill="#fff">
        <path
          d="M510,8 C561.846401,8.16468012 603.83532,50.1535995 604,102 L604,510 C603.83532,561.846401 561.846401,603.83532 510,604 L102,604 C50.1535995,603.83532 8.16468012,561.846401 8,510 L8,102 C8.16468012,50.1535995 50.1535995,8.16468012 102,8 L510,8 L510,8 Z M510,0 L102,0 C45.9,6.21724894e-15 0,45.9 0,102 L0,510 C0,566.1 45.9,612 102,612 L510,612 C566.1,612 612,566.1 612,510 L612,102 C612,45.9 566.1,6.21724894e-15 510,0 Z"
          fill-rule="nonzero"/>
        <text
          id="HY"
          font-family="Arial"
          font-size="350"
          font-weight="lighter"
          letter-spacing="2">
          <tspan
            x="72.0527344"
            y="446">H
          </tspan>
          <tspan
            x="307.5"
            y="446">Y
          </tspan>
        </text>
      </svg>
      <span class="sr-only">Home</span>
    </b-navbar-brand>
    <b-collapse
      id="bd-main-nav"
      is-nav
      class="justify-content-between">
      <b-navbar-nav>
        <b-nav-item
          to="/user">UserManage
        </b-nav-item>
        <b-nav-item
          to="/blog">BlogManage
        </b-nav-item>
      </b-navbar-nav>
    </b-collapse>
  </b-navbar>
</template>

<style>
.main-nav {
  box-shadow: 0 0 5px rgba(57, 70, 78, 0.2) !important;
  background: white;
  z-index: 1050;
  padding-bottom: 0;
}

.main-nav .nav-link,
.main-nav .navbar-brand {
  padding-bottom: 10px;
  border-bottom: 3px solid transparent;
}

.main-nav .nav-link.nuxt-link-active {
  border-bottom: 3px solid #4fc08d;
}

.navbar-brand img {
  height: 1.5em;
  padding-right: 0.5em;
}
</style>

<script>
export default {
  data: function() {
    return {
      version: 1.0
    }
  }
}
</script>

header.vue

<template>
  <b-collapse
    id="bd-docs-nav"
    tag="nav"
    is-nav
    class="bd-links">
    <router-link
      v-for="group in subNav"
      :key="group.base"
      :to="group.base"
      :exact="group.exact"
      active-class="active"
      class="bd-toc-item"
      tag="div">

      <router-link
        :to="group.base"
        exact
        class="bd-toc-link">
        {{ group.title }}
        <small
          v-if="group.new"
          class="badge badge-success">NEW
        </small>
        <small
          v-if="group.experimental"
          class="badge badge-warning">BETA
        </small>
        <small
          v-if="group.breaking"
          class="badge badge-danger">BREAKING CHANGE
        </small>
      </router-link>

      <b-nav class="bd-sidenav">
        <b-nav-item
          v-for="page in group.pages"
          :to="(group.base + page.slug).replace(/\/\//g,‘/‘)"
          :key="page.title"
          exact
          class="bd-toc-link">
          {{ page.title }}
          <b-badge
            v-if="page.new"
            tag="small"
            variant="success">NEW
          </b-badge>
          <b-badge
            v-if="page.experimental"
            tag="small"
            variant="warning">BETA
          </b-badge>
          <b-badge
            v-if="page.breaking"
            tag="small"
            variant="danger">CHANGE
          </b-badge>
          <b-badge
            v-if="page.features"
            tag="small"
            variant="info">ENHANCED
          </b-badge>
        </b-nav-item>
      </b-nav>

    </router-link>
  </b-collapse>
</template>

<script>
import { subNav } from ‘../assets/js/common/menu.js‘

export default {
  computed: {
    subNav: () => subNav
  }
}
</script>

<style scoped>
.bd-sidebar .nav > li > a.active {
  /*color: #0275d8;*/
  color: black;
  font-weight: bold;
}
</style>

sidebar.vue

  2. 修改App.vue

<template>
  <div>
    <mHeader/>
    <b-container fluid>
      <b-row class="flex-xl-nowrap2">
        <b-col
          cols="12"
          md="3"
          xl="2"
          class="bd-sidebar">
          <mSideBar/>
        </b-col>
        <b-col
          cols="12"
          md="9"
          xl="8"
          class="pb-md-3 pl-md-5 bd-content">
          <div class="clearfix">
            <b-button-group class="my-2 float-right">
              <b-btn
                :href="issueURL"
                size="sm"
                variant="light"
                target="_blank">Hard Work
              </b-btn>
              <b-btn
                :href="editPageURL"
                size="sm"
                variant="light"
                target="_blank">Happy Life
              </b-btn>
            </b-button-group>
          </div>
          <router-view/>
        </b-col>
      </b-row>
    </b-container>
    <!--mFooter/-->
  </div>
</template>

<script>
import mHeader from ‘./layouts/header.vue‘
import mFooter from ‘./layouts/footer.vue‘
import mSideBar from ‘./layouts/sidebar.vue‘

export default {
  name: ‘App‘,
  components: { mHeader, mFooter, mSideBar },
  data: function() {
    return {
      issueURL: ‘http://www.huangyukeji.com‘,
      editPageURL: ‘http://www.huangyukeji.com‘
    }
  }
}
</script>

app.vue

  3. 添加菜单json

  在src/assets中添加 js/common/menu.js

let users = [
  {
    slug: ‘/index‘,
    title: ‘index‘
  },
  {
    slug: ‘/add‘,
    title: ‘add‘
  }
]

let blogs = [
  {
    slug: ‘/add‘,
    title: ‘add‘
  }
]

export const subNav = [
  {
    title: ‘User‘,
    base: ‘/user‘,
    pages: users
  },
  {
    title: ‘Blog‘,
    base: ‘/blog‘,
    pages: blogs
  }
]

index.js -- 测试用

  4. 添加css文件

  项目的导航是从vue-bootstrap项目copy的,直接下载了他的样式。文件目录如下:

  

  下载地址:https://github.com/szwangyu/kotlin-vue/tree/master/vuedemo/src/assets

运行效果如下:

  

原文地址:https://www.cnblogs.com/szwangyu51/p/9822787.html

时间: 2024-10-09 11:01:38

Vue 学习随笔五 - 简单项目设计的相关文章

vue学习(十五) 过滤器简单实用

vue过滤器: 概念:vue.js允许你自定义过滤器可被用作一些常见文本的格式化.过滤器可以用在两个地方:插值表达式   v-bind表达式  由管道符指示 //过滤器调用时候的格式 {{ name | 处理的函数名 }} //可以通过Vue.filter来自定义过滤器 data就是管道符" | " 前面的内容,也就是name Vue.filter('过滤器名称',function(data){ return data+'hahahaha' }) //该过滤器就是为插值表达式的name

Delphi面向对象学习随笔五:一个真正的类

作者:巴哈姆特(转载请注明出去并保持完整)写在前面的话:    本篇笔记完全属于我的个人主观观点,如有错误请指正^_^  类的定义:    首先,我想说的是,类并不是一些变量和函数简单的“拼凑”出来的.类应该是对于一个事物的抽象描述,而不是一个动作的抽象描述.怎么讲呢?    比如说:鞋子是一个事物,我们可以把它的特点抽象出来,并用计算机语言去描述成为一个类,而鞋子又分了凉鞋.皮鞋等,那么“凉鞋”和“皮鞋”则是“鞋子”的派生类.它们看上去是非常自然的.    那么,现在我有另外一个类,“初始化数

Kotlin学习随笔一 - 简单需求和项目初始化

Kotlin是对Java的一个简练的封装,提供了很多便利性的语法,熟练使用后,会大大缩减代码的行数,提高编码的速度. 具体Kotlin的优劣,网上很多评论,有兴趣的可以去看看,我们开始我们简单的demo开发. 需求:最简单的用户的CRUD,提供REST服务 开发工具:IDEA Java框架:Springboot 数据库:Mysql ORM:Hibernate JPA 好,下面来感受一下Kotlin的魅力,首先我们用IDEA新建一个基于Kotlin的Springboot项目,Kotlin是Inte

ios学习随笔五

Touches 触摸事件处理:在viewcontroller中添加touch的一些方法 //获取触摸点println(touches.anyObject()?.locationInView(self.view)) 多点触摸得在viewdidload中打开多触摸, self.view.multipleTouchEnabled = true 缩放图片: 缩放和放大是通过多点触摸时候,屏幕之间的距离.当两点之间的距离大了,就是放大,否则是缩小 if touches.count == 2{ var cu

linux 学习随笔-shell简单编写

脚本最好都放在/usr/local/sbin中 脚本的执行 sh -x 脚本.sh -x可以查看执行过程 1在脚本中使用变量 使用变量的时候,需要使用$符号:  #!/bin/bash  ##把命令赋值为变量,需要使用反引号  d=`date +"%H:%M:%S"`  echo "The script begin at $d"  echo "Now we'll sleep 2 seconds"  sleep 2  d1=`date +"

vue学习笔记——简单的介绍以及安装(一)

学习编程需要的是 API+不断地练习^_^ Vue官网:https://cn.vuejs.org/ 菜鸟教程:http://www.runoob.com/vue2/vue-tutorial.html 1.简单的介绍 Vue.js(读音 /vju?/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. Vue 学习起来非常简单,本教程基于 Vue 2.1.8 版

关于提高映射速度的ASMA测序技术学习随笔

  最近看了一篇关于NGS(下一代测序).ASAM的论文.名字为<AMAS: Optimizing the Partition and Filtration of Adaptive Seeds to Speed up Read Mapping>.这篇论文介绍了一种可以提高映射速度的测序技术--AMAS.总体上来说这个技术的映射速度.内存占用.稳定性都是最优的.ASAM测序方法使用的核心是与GEM(The Genome Multitool)相同的自适应种子.之后又介绍了与其他主流测序算法的对比.

Vue.JS入门学习随笔

PS:先说说学习Vue的缘由吧,学习完了React之后,突然发现又出了一款叫做vue的框架,而且据说可以引领又一波新框架的潮流,我容易吗我!!! Vue.js(读音 /vju?/, 类似于view)是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合.另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用. Vue.js 的目标是通过尽可能简单

## vue学习笔记--简单父子组件--

## vue学习笔记 ### 组件之间的通讯1. 父组件到子组件```js //father <div> <son msg="父组件的信息写在这"></son> <son title="title"></son> <!--:title--> </div> <script> export default { data(){ return { title: '当传递一个变量过