Thymeleaf?+?Vue組件化開發(fā)方式
前言
提示:thymeleaf 固然好,但是 vue 也少不了:
可能 vue 用習(xí)慣了之后大部分玩家之后使用腳手架,vuecli vite來(lái)實(shí)現(xiàn)快速開發(fā),可早早地就忘記了其實(shí)還是可以搭配 springboot 的一些模版引擎來(lái)完成亂配的效果。
一、vue2
1.引入靜態(tài)文件
可以先引用 vue.min.js ,這里使用了 th 完成了動(dòng)態(tài)的 靜態(tài)資源目錄
下面引入了 :
assets/js
目錄下的: vue、vue-i18n、vue-routerassets/plugins/elemet
目錄下的: elementui.jsassets/static
目錄下的: 也就是我們自己寫的 main.js、i18n.js、router.js
你可以先引入 vue.min.js 和 main.js 來(lái)完成最簡(jiǎn)單的組件引用功能
<!-- ================== BEGIN vue-js ================== --> <script th:src="|${RES}/js/vue.min.js|"></script> <script th:src="|${RES}/js/vue-i18n.min.js|"></script> <script th:src="|${RES}/js/vue-router.min.js|"></script> <script th:src="|${RES}/plugins/element/elementui.js|"></script> <script th:src="|${RES}/plugins/element/locale/zh-CN.js|"></script> <script th:src="|${RES}/plugins/element/locale/en.js|"></script> <script th:src="|${RES}/static/i18n.js|"></script> <script th:src="|${RES}/static/router.js|"></script> <script th:src="|${RES}/static/main.js|"></script> <!-- ================== END vue-js ================== -->
樣式引入:
<link th:href="|${RES}/plugins/element/elementui.css|" rel="external nofollow" rel="stylesheet" />
第一行其實(shí)就相當(dāng)于
<script src="/assets/js/vue.min.js"></script>
注意引入順序,vue.min.js 要在最前面
2.聲明組件
我們現(xiàn)在想要聲明一個(gè) VueHeader 組件然后在 index.html 里用,那么如何去做?
1.在一個(gè)文件夾里創(chuàng)建一個(gè) header.html,這里要用到 th:fragment 標(biāo)簽了
給我們的 template
設(shè)置一個(gè) id (vue-header)
,然后 <script> template
里綁定,這就已經(jīng)跟 .vue 文件差不多了
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <div th:fragment="header"> <template id="vue-header"> <div id="header" class="app-header app-header-inverse"> Header </div> </template> <script> const VueHeader = { template: '#vue-header', components: { DtEditor, }, data() { return { activeLang: '' } }, created() {}, methods: { // 切換語(yǔ)言 changeLang() { console.log(`語(yǔ)言切換: ${this.activeLang}`) i18n.locale = this.activeLang }, } } </script> </div> </html>
2.然后在 index.html 加入以下代碼
假設(shè)我上面那個(gè) header.html 在 pages 目錄下,那就寫成下面這樣,引入的順序不重要了,也可放在 vue.min.js 引入之前
<template th:replace="|/pages/header|::header"></template> <!-- ================== BEGIN vue-js ================== --> <script th:src="|${RES}/js/vue.min.js|"></script> ...
3.然后在 main.js 里引入組件就可以了
main.js 中的 vueApp 根實(shí)例綁定的就是 index.html
中 id
為 app
的元素
// 全局方法,可以在這里注冊(cè) Vue.use( (_vue, _opts) => { _vue.prototype.$test = () => { console.log('test') } } ) const vueApp = new Vue({ el: '#app', i18n, router, components: { VueHeader }, data() { return { activeLang: '', // index.html data } }, methods: {} })
4.最后使用
因?yàn)槟銊倓偸窃?vueApp 根實(shí)例中引入的組件,所以加載 app div 里就可以了
<!-- BEGIN #app --> <div id="app"> <!-- BEGIN #header --> <vue-header></vue-header> <!-- END #header --> </div>
二、語(yǔ)法搭配
使用vue方法調(diào)用th數(shù)據(jù)
如下:$t()
是 vue 國(guó)際化方法,${menu.name}
是 th 里的數(shù)據(jù)
<div class="menu-text" th:v-text="|$t('${menu.name}')|"></div>
類似的還有點(diǎn)擊事件
<a th:@click="| changeActive('${menu.url}') |" href="javascript:;" rel="external nofollow" class="menu-link"> <div class="menu-text" th:v-text="|$t('${menu.name}')|"></div> </a>
<a th:v-on:click="|openEditor(${session?.USER})|" > {{ $t('xxx') }} </a>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解關(guān)于Vue版本不匹配問(wèn)題(Vue packages version mismatch)
這篇文章主要介紹了詳解關(guān)于Vue版本不匹配問(wèn)題(Vue packages version mismatch),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09vue動(dòng)態(tài)注冊(cè)組件實(shí)例代碼詳解
寫本篇文章之前其實(shí)也關(guān)注過(guò)vue中的一個(gè)關(guān)于加載動(dòng)態(tài)組件is的API,最開始研究它只是用來(lái)實(shí)現(xiàn)一個(gè)tab切換的功能,需要的朋友可以參考下2019-05-05vue前端框架—Mint UI詳解(更適用于移動(dòng)端)
這篇文章主要介紹了vue前端框架—Mint UI的詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04簡(jiǎn)單聊聊vue2.x的$attrs和$listeners
vue組件之間的通信方式有很多種,props/emit,event bus,vuex,provide/inject等,還有一種通信方式就是$attrs和$listeners,下面這篇文章主要給大家介紹了關(guān)于vue2.x中$attrs和$listeners的相關(guān)資料,需要的朋友可以參考下2022-03-03淺談vue中g(shù)et請(qǐng)求解決傳輸數(shù)據(jù)是數(shù)組格式的問(wèn)題
這篇文章主要介紹了淺談vue中g(shù)et請(qǐng)求解決傳輸數(shù)據(jù)是數(shù)組格式的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08Antd的Table組件嵌套Table以及選擇框聯(lián)動(dòng)操作
這篇文章主要介紹了Antd的Table組件嵌套Table以及選擇框聯(lián)動(dòng)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10vue實(shí)現(xiàn)評(píng)價(jià)星星功能
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)評(píng)價(jià)星星功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06vue+axios+mock.js環(huán)境搭建的方法步驟
本篇文章主要介紹了vue+axios+mock.js環(huán)境搭建的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08