Thymeleaf?+?Vue組件化開發(fā)方式
前言
提示:thymeleaf 固然好,但是 vue 也少不了:
可能 vue 用習慣了之后大部分玩家之后使用腳手架,vuecli vite來實現(xiàn)快速開發(fā),可早早地就忘記了其實還是可以搭配 springboot 的一些模版引擎來完成亂配的效果。
一、vue2
1.引入靜態(tài)文件
可以先引用 vue.min.js ,這里使用了 th 完成了動態(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 來完成最簡單的組件引用功能
<!-- ================== 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" />第一行其實就相當于
<script src="/assets/js/vue.min.js"></script>
注意引入順序,vue.min.js 要在最前面
2.聲明組件
我們現(xiàn)在想要聲明一個 VueHeader 組件然后在 index.html 里用,那么如何去做?
1.在一個文件夾里創(chuàng)建一個 header.html,這里要用到 th:fragment 標簽了
給我們的 template 設置一個 id (vue-header),然后 <script> template 里綁定,這就已經跟 .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: {
// 切換語言
changeLang() {
console.log(`語言切換: ${this.activeLang}`)
i18n.locale = this.activeLang
},
}
}
</script>
</div>
</html>
2.然后在 index.html 加入以下代碼
假設我上面那個 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 根實例綁定的就是 index.html 中 id 為 app 的元素
// 全局方法,可以在這里注冊
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.最后使用
因為你剛剛是在 vueApp 根實例中引入的組件,所以加載 app div 里就可以了
<!-- BEGIN #app -->
<div id="app">
<!-- BEGIN #header -->
<vue-header></vue-header>
<!-- END #header -->
</div>
二、語法搭配
使用vue方法調用th數(shù)據
如下:$t() 是 vue 國際化方法,${menu.name} 是 th 里的數(shù)據
<div class="menu-text" th:v-text="|$t('${menu.name}')|"></div>
類似的還有點擊事件
<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>
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
詳解關于Vue版本不匹配問題(Vue packages version mismatch)
這篇文章主要介紹了詳解關于Vue版本不匹配問題(Vue packages version mismatch),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09
淺談vue中get請求解決傳輸數(shù)據是數(shù)組格式的問題
這篇文章主要介紹了淺談vue中get請求解決傳輸數(shù)據是數(shù)組格式的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
Antd的Table組件嵌套Table以及選擇框聯(lián)動操作
這篇文章主要介紹了Antd的Table組件嵌套Table以及選擇框聯(lián)動操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
vue+axios+mock.js環(huán)境搭建的方法步驟
本篇文章主要介紹了vue+axios+mock.js環(huán)境搭建的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08

