IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> cdn引入实现vue-router的嵌套路由 -> 正文阅读

[JavaScript知识库]cdn引入实现vue-router的嵌套路由

项目背景

目前的项目是基于若依框架的前后不分离的项目开发的后台管理项目,在此基础上进行迭代开发。

尝试:目前按钮权限是采用<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">的方式进行权限控制的,直接用vue-cli构建一个项目部署的话,按钮的权限无法根据后台设置的角色控制,这个不行;

看了一下若依的文档,然后新的页面的是在vue、vue-router、iview、Thymeleaf,在静态HTML中写vue代码。

实现嵌套路由的代码

index.html

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">

<head th:replace="init :: header('待办项目')"></head>

<body>
  <!-- 默认先不显示HTML中的内容,是由于一开始经后端渲染的时候,这个vue还没加载好,会显示没处理的HTML -->
  <div id="app" style="opacity: 0">
    <router-view></router-view>
  </div>
  <!-- 利用thymeleaf引入公共组件,加载vue、vue-router的写在公共的页面中了 -->
  <div th:replace="init :: expand"></div>
  <div th:replace="init :: base"></div>
  <div th:replace="init :: iview"></div>
  <div th:replace="init :: footer"></div>
  <!--    项目基础信息详情组件-->
  <div th:replace="city/projectInfo/components/baseProjectInfo :: baseProjectInfoComponents"></div>
  <div th:replace="city/projectInfo/components/baseProjectInfo :: uploadFilesComponents"></div>
  <!--    项目上传相关组件-->
  <div th:replace="city/projectInfo/components/newItemForm :: newProjectItemFormComponents"></div>
  <!--    历史详情组件-->
  <div th:replace="city/projectInfo/components/projectHistory :: projectHistoryComponents"></div>
  <!--    流程处理的路由页面-->
  <div th:replace="city/projectInfo/components/dealProject :: dealProjectHistoryComponents"></div>
  <div th:replace="city/projectInfo/components/dealProject :: dealProjectInfoComponents"></div>

  <script>
    let routes = [
      { path: '/', name: 'index', },
      { path: '/newProject', name: 'newProject', component: NewProjectItemFormComponent, },
      {
        path: '/projectHistory',
        name: 'projectHistory',
        // 组件的变量是利用thymeleaf定义在其他文件中
        component: ProjectHistoryComponent,
        children: [
          { path: '/projectHistory/bdGroup', name: 'projectHistoryBdGroup', component: BDGroupDealProjectInfo },
          { path: '/projectHistory/index/:projectCode', name: 'projectHistoryIndex', component: DealProjectHistory, }
        ]
      },
    ];
    let router = new VueRouter({
      routes: routes
    })
    let vm = new Vue({
      router,
      el: '#app',
      data() {
        return {}
      },
      created() {
        $('#app').css('opacity', '1');
        this.loading = true
      },
    })
  </script>
</body>

</html>

init.html

公共的组件引用

<div th:fragment="base">
    <script th:src="@{/js/vue.min.js}"></script>
    <script th:src="@{/js/vue-router.js}"></script>
    <script th:src="@{/js/axios.min.js}"></script>
    <script th:src="@{/ajax/libs/layui/layui.js}"></script>
</div>
<div th:fragment="iview">
    <link th:href="@{/css/iview.css}" rel="stylesheet" />
    <script th:src="@{/js/iview.min.js}"></script>
</div>

projectHistory.html

<div th:fragment="projectHistoryComponents">
  <style>
  </style>
  <script type="text/x-template" id="projectHistory">
      <tempalte>
          <div class="project-history-wrapper">
            <router-view></router-view>
          </div>
      </tempalte>
  </script>
  <script>
    let ProjectHistoryComponent = Vue.component("ProjectHistory", {
      data() {
        return {
        }
      },
      template: "#projectHistory",
    });
  </script>
</div>

组件属性props定义

以前工程化项目都没有这个问题,直接在HTML写会转成全小写才能注册props,或者按官方的写法

Prop 的大小写 (camelCase vs kebab-case)

HTML 中的 attribute 名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符。这意味着当你使用 DOM 中的模板时,camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab-case (短横线分隔命名) 命名:

Vue.component('blog-post', {
  // 在 JavaScript 中是 camelCase 的
  props: ['postTitle'],
  template: '<h3>{{ postTitle }}</h3>'
})
<!-- 在 HTML 中是 kebab-case 的 -->
<blog-post post-title="hello!"></blog-post>
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:49:36  更:2021-07-17 11:50:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 1:07:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码