在Django+Vue3+GraphQL的Blog例子代码中引入Element-Plus UI Framework

这篇具有很好参考价值的文章主要介绍了在Django+Vue3+GraphQL的Blog例子代码中引入Element-Plus UI Framework。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Vue3的UI Framework中有Element-Plus、BalmUI、Quasar、PrimeVue、Ant Design Vue等UI Framework.

Element-Plus是Element-UI的Vue3版,Element-UI的使用人数的基数较大,Github上的Star数也较多,就选择了Element-Plus作为这个Blog项目的UI Framework.

UI Framework的好处就是提供了相较裸Html+CSS开发起来更好看和方便一些.

Element-Plus在国内有镜像站点,参看起来速度相对快一些. Element-Plus国内镜像站点.

代码可以从Github上取得https://github.com/magicduan/django_vue_graphql/releases/tag/base_0.2

配置Element-UI开发环境

如果在已有的项目中安装的用包管理器安装最方便了.

 npm install element-plus --save

由于对Element-Plus的组件的使用方法不是很熟练, 按照官网的说明我直接从Element-Plus提供的Vite的快速模版进行启动.

https://github.com/element-plus/element-plus-vite-starter

从Github上下载代码后展开,执行下列命令就可以启动一个Element-Plus的Demo服务了.

npm install
npm run dev

按照前一篇Blog例子代码, 修改vite.config.ts,加入端口配置,将Vue的端口设置为8080

export default defineConfig({
....
  server:{
    port:8080
  },
....

使用npm 安装vue-router、apollo-client

npm install vue-router@4
npm install --save graphql graphql-tag @apollo/client
npm install --save @vue/apollo-composable

 文章来源地址https://www.toymoban.com/news/detail-412355.html

迁移代码

由于是后安装的vue-router,缺省的vue-router 没有设置, 建立与Frontend相同的目录

src/router
src/views

将Blog项目中的Frontend中相关的代码Copy进入对应目录

src/router/index.ts
src/views/AllPosts.vue
src/views/AuthorView.vue
src/views/PostsByTag.vue
src/views/PostView.vue
src/componets/AuthorLink.vue
src/componets/PostLis.vue

修改顶部菜单BaseHeader.vue

Element-UI模版提供的是顶菜单+左工具栏的UI模版, src/compoments/layout/BaseHeader.vue 为顶部菜单, BaseSide.vue为左边菜单.

这里我们修改BaseHeader.vue,修改后菜单项为

MyBlog --> HomeView.vue
Posts 
   All Posts --> All Posts
   Add Post //将来实现
   Delete Post//将来实现
Tag ->根据Backend端的取得Tag的种类动态生成Tag菜单
HelloWord -->对应原Element-UI的Helloworld的例子

由于需要根据BackEnd端的Tag查询结果动态生成Tag,我们为BaseHeader.vue加入Props :tagItems

Baseheader.vue代码具体修改如下:

<script setup lang="ts" >
import { toggleDark } from '~/composables';
import { ref } from 'vue';
const props = defineProps({
  tagItems:{type:Array,required:true, default:[]}
})

const msg = ref("/hello/\"Hello Vue 3.0 + Element Plus + Vite\"")

</script>
<template>
  <el-menu class="el-menu-demo" mode="horizontal" :router= true>
    <el-menu-item index="/">My Blog</el-menu-item>
    <el-sub-menu index="2">
      <template #title>Posts</template>
      <el-menu-item index="/posts">All Posts</el-menu-item>
      <el-menu-item index="2-1">Add Post</el-menu-item>
      <el-menu-item index="2-2">Delete Post</el-menu-item>
      <el-sub-menu index="2-4">
        <template #title>...</template>
        <el-menu-item index="2-4-1">item one</el-menu-item>
        <el-menu-item index="2-4-2">item two</el-menu-item>
        <el-menu-item index="2-4-3">item three</el-menu-item>
      </el-sub-menu>
    </el-sub-menu>

    <el-sub-menu v-if="tagItems.length" index="tags" >
      <template #title>Tags</template>
      <el-menu-item v-for="tagInfo in tagItems" :index="tagInfo.path">
        {{ tagInfo.name }}
      </el-menu-item>
    </el-sub-menu>
    <el-menu-item v-else :index="tags" disabled>Tags</el-menu-item>

    <el-menu-item :index="msg" >HelloVue</el-menu-item>

    <el-menu-item h="full" @click="toggleDark()">
      <button class="border-none w-full bg-transparent cursor-pointer" style="height: var(--ep-menu-item-height);">
        <i inline-flex i="dark:ep-moon ep-sunny" />
      </button>
    </el-menu-item>
  </el-menu>
</template>

 其中需要注意的几点:

  • 将菜单项与vue-router结合起来,菜单项的index属性为router/index.ts中设置的URL path, 需要设置el-menu
    :router= true
  • HelloWorld.vue 其中需要属性msg,为了在菜单中进行配置,我们需要在index.ts中将HelloWord.vue的URL的prop设置为true
  
const router = createRouter({
...  
    {
      path: '/hello/:msg',
      name: 'HellowWorld',
      component: () => import("../components/HelloWorld.vue"),
      props: true  
    },
...

将HelloWorld.vue Component的Prop属性作为参数来传递

修改App.vue

在App.vue中加入从Backend通过GraphQL取Tags的代码, 将Tags数组传递给BaseHeader.vue,将<HelloWord .../>改为<routerview/>

<script setup lang="ts">
import HomeView from './views/HomeView.vue';
import HelloWorld from './components/HelloWorld.vue';
import gql from 'graphql-tag';
import { useQuery } from '@vue/apollo-composable';
import { computed } from '@vue/reactivity';

const {result,loading,error} =  useQuery(gql`
  query getTags{
    tags {
          name
    }
  }
`)

const tags = computed(()=>{
  let tagsArray = []
  if (result.value){
    result.value?.tags.forEach(tagName => {
      let tagInfo = {path:"/tag/"+tagName.name,name:tagName.name}
      tagsArray.push(tagInfo)
    });
  }
  return tagsArray

})

</script>
<template>
  <el-config-provider namespace="ep" >
    <BaseHeader :tagItems="tags"/>
    <div style="display: flex">
      <BaseSide />
      <div>
        <!-- <HelloWorld msg="Hello Vue 3.0 + Element Plus + Vite" @changeTags ='changTags'/>  -->
        <RouterView/> 
      </div>
    </div>
  </el-config-provider>
</template>

<style>
#app {
  text-align: center;
  color: var(--ep-text-color-primary);
}

.element-plus-logo {
  width: 50%;
}
</style>

在Backend中加入Tags的查询

backend/blog/scheme/py

class Query(graphene.ObjectType):
    ....
    tags = graphene.List(TagType)
    .....
    def resolve_tags(root,info):
        return (
            models.Tag.objects.all()
        )

 

修改main.ts加入router,Apollo相关的代码

import { DefaultApolloClient } from '@vue/apollo-composable'
import { ApolloClient, createHttpLink, InMemoryCache } from '@apollo/client/core'

// HTTP connection to the API
const httpLink = createHttpLink({
  uri: 'http://localhost:8000/graphql',
})

// Cache implementation
const cache = new InMemoryCache()

// Create the apollo client
const apolloClient = new ApolloClient({
  link: httpLink,
  cache,
})

const app = createApp({
    setup () {
      provide(DefaultApolloClient, apolloClient)
    },
  
    render: () => h(App),
  })

app.use(router)

 

至此blog相关的代码迁移完成, 可以完成Posts List等操作了,但是页面相对不太好看,下一步我们使用Element-UI的控件进行对应改造即可.

使用Element-UI改造Posts等相关的Vue

在技术打通之后,UI的改造就是细心+审美的工作了,按照我自己的意思进行了修改,具体的修改就不赘述了,直接参考代码即可.

 

到了这里,关于在Django+Vue3+GraphQL的Blog例子代码中引入Element-Plus UI Framework的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3 vue.config.js配置Element-plus组件和Icon图标实现按需自动引入

    打包时,报警告,提示包太大会影响性能 在页面直接使用,直接使用 SVG 图标,当做一般的 svg 使用 icon使用时需要用以下两种方式方式: 如果用在el-button里面的icon属性上使用,用SVG方式无效,还是需要引入再使用(不知道有没有其他方式) 注意: 使用 :icon=\\\"Edit\\\" 则icon的大

    2024年02月06日
    浏览(69)
  • vue3 + element-plus 的 upload + axios + django 文件上传并保存

    座右铭: 怎么简单怎么来,以实现功能为主。 欢迎大家关注公众号与我交流  之前在网上搜了好多教程,一直没有找到合适自己的,要么只有前端部分没有后端,要么就是写的不是很明白。所以还得靠自己摸索出来后,来此记录一下整个过程。 其实就是不要用默认的 actio

    2024年02月20日
    浏览(52)
  • vue3 - element-plus 上传各种 word pdf 文件、图片视频并上传到服务器功能效果,示例代码开箱即用。

    在 vue3 项目中,使用 element plus 组件库的 el-upload 上传组件,进行文件、图片图像的上传功能示例。 可直接复制,再改个接口地址。 在这里上传

    2024年02月15日
    浏览(78)
  • Vite vue 使用cdn引入element-plus

    vite-plugin-cdn-import:cdn的引入插件 vite.config.js 使用cdn 引入 element-plus 一定也要用cdn 引入 vue、vue-demi 并且引入顺序不能出错, 注意点 ①  如果不引入vue,就会提示createElementVnode找不到, 原因是在element-plus这个源码中也在使用vue这个变量   ②如果不引入vue-demi,可以理解为vu

    2024年02月01日
    浏览(55)
  • vue3 - element-plus表格组件el-table实现鼠标拖曳排序功能,vue3 Table表格拖拽排序,表格每行使用鼠标拖动进行排序功能,表格拖拽排序实现(详细示例代码,一键复制开箱即用

    在vue3+elementPlus网站开发中,详细完成el-table表格的鼠标拖拽/拖曳/拖动排序,vue3使用element plus表格组件进行表格每行的拖动换位置排序功能(支持一键开启和关闭鼠标是否可拖动排序,代码易改造灵活),稍加改造可支持【树形复杂表格的排序】! 详细示例源代码,复制运行

    2024年04月09日
    浏览(64)
  • vue3 - 使用element-plus组件库el-upload上传超大mp4视频分片上传,Upload上传大文件mp4视频进行切片分段上传到后端服务器教程,vue3如何上传很大的视频(详细示例代码

    在vue3+elementPlus中,使用el-upload组件\\\"切片分段\\\"上传mp4大视频到服务器,支持任意大视频、大文档、大压缩包等超大文件,通用方法将其拆分成多个小段进行逐个逐条上传到后端(支持断点续传、下载预览)。 详细大文件分片功能源码,可只拿前端源码或只拿springboot(Java)后

    2024年03月16日
    浏览(82)
  • vue3使用element-plus

    element-ui 是配合 vue2 使用,element-plus 是配置 vue3 使用的 1. 包管理器的方式 如果是使用 webpack 或者 vite 打包工具新建的项目 2. 浏览器直接导入 直接通过浏览器的 HTML 标签导入 Element Plus,然后就可以使用全局变量 ElementPlus 1. 导入全部组件且注册所有的图标 声明使用 ElementPl

    2024年02月08日
    浏览(79)
  • Vue3导入Element-plus方法

    先引入依赖 main.js中要引入两个依赖 然后 这个东西 我们最好还是挂载vue上 所以 还是 然后 我们可以在组件上试一下用一个ElementUi的表格组件 参考代码如下 运行结果如下 也是没有任何问题

    2024年02月06日
    浏览(55)
  • vue3 element-plus 实现图片预览

    element-plus下有这么一个组件 el-image-viewer /,但是这个组件是没写在文档上面的,像普通组件一样使用即可 可以通过点击按钮实现图片预览,而非el-image组件只能通过点击图片实现预览 2.1封装组件 2.3组件使用 在需要使用的地方引入,然后使用即可,这不是重点,每个人使用的

    2024年02月15日
    浏览(59)
  • 使用 Vite + Vue3 + Element-Plus + Pinia + Ts 搭建 Vue3 项目

    Vite 需要 Node.js 版本 14.18+,16+。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。 首先 npm 输入: Project name :项目名称 Select a framework :选择一个框架 Select a variant :选择 ts 或者 js 输入项目名称后选择 vue 选择

    2024年02月09日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包