欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue+freemarker中遇到的坑及解決

 更新時間:2022年09月09日 09:36:32   作者:pilaf1990  
這篇文章主要介紹了vue+freemarker中遇到的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

vue+freemarker遇到的坑

java后端開發(fā)者做后臺管理系統(tǒng),用模版技術(shù)還是挺方便的,但是如果在頁面上對數(shù)據(jù)進行修改,怎么辦呢?

可以用jQuery選中各個dom節(jié)點的值,然后組裝成后臺接口中需要的Form,再用ajax請求后臺,這種方式的缺點在于,如果數(shù)據(jù)字段比較多,需要手動選擇很多個dom節(jié)點,再取值,想想都可怕。

由于筆者之前做過AngularJS的項目,知道了數(shù)據(jù)的雙向綁定,現(xiàn)在很火的Vue.js也是跟AngularJS差不多,支持雙向綁定。但是不想用前后端分離,搞兩套部署,主要是對前端部署那些也不熟悉。

那筆者就想在模版頁面中引入Vue.js的雙向綁定功能,這樣就不用再用jQuery去選擇dom節(jié)點了。

大概思路瀏覽器請求Controller,返回一個視圖,這個視圖就是freemarker模版,在模版中引入Vue.js,將頁面上需要提交的數(shù)據(jù)綁定到Vue的對象中的數(shù)據(jù)上,然后在創(chuàng)建或更新的時候直接用ajax請求把這個Vue對象中的數(shù)據(jù)傳給后端。

在這個過程中遇到了幾個坑

1.通過jquery修改vue綁定的model值(v-model),vue取不到這個值。

如freemarker模版中有<img :src=“pic_url”/>,在用戶上傳圖片后,通過jquery更改img的src屬性為圖片地址之后,通過vue的對象中的data中的pic_url是取不到這個值的。

查了網(wǎng)上說,vue一般都只監(jiān)聽用戶在頁面上的操作事件,jquery修改的事件不能夠被vue監(jiān)聽到,可以在jquery修改后dispatch一個event給vue監(jiān)聽,筆者為了省事,在vue對象中methods中的方法中,把需要用jquery改變的地方,還是用jquery取到之后再賦值給vue對象中的數(shù)據(jù)屬性上。

2.freemarker模版片段中引用了<script></script>,在script中有new Vue的操作,結(jié)果到瀏覽器頁面報錯:

templates should only be responsible for mapping the state to the ui. avoid placing tags with side-effects in your templates, such as <script>, as they will not be parsed.

后來上網(wǎng)查了一下,在script中加上了type就好了:

<script type=“application/javascript”>

可以參考https://stackoverflow.com/questions/38119088/error-templates-should-only-be-responsible-for-mapping-the-state-to-the-ui-avo

3.freemarker模版中的input value明明是有值的,到瀏覽器中頁面上卻不顯示。

原因是因為這個input被vue的model綁定了,到瀏覽器中vue把數(shù)據(jù)清空了,雖然在開發(fā)者工具中仍可以看到input的value屬性是有值的,但是頁面是不顯示的,vue的對象中data中也沒有值。

正確的做法應(yīng)該是在freemarker中,把值賦給vue的對象,而不是賦值給dom上的input節(jié)點的value:

? ? var modifyVm = new Vue({
? ? ? ? el: '#myModifyModalContent',
? ? ? ? data: {
? ? ? ? ? ? myForm: {
? ? ? ? ? ? //這兒把freemarker模版中的初始值賦值給vue對象的data中屬性
? ? ? ? ? ? //然后freemarker中寫成
?? ??? ??? ?//<input type="text" v-model="myForm.name" placeholder="請輸入城市名稱"/>
?? ??? ??? ?//這樣就可以了。
? ? ? ? ? ? ? ? name: "${oldCityInfo.name!''}",
? ? ? ? ? ? ? ? //標簽
? ? ? ? ? ? ? ? labels: '',
? ? ? ? ? ? }
? ? ? ? },
?? ??? ?...
?? ?)

freemarker的一些坑問題

1.對空對象十分敏感

freemarker對空值敏感,當我們的值為空時,會拋出異常。

解決辦法是:

1.${item!''} 當item為null時渲染為空字符串,不為空則渲染自身值。

2.${item??}結(jié)合freemarker的條件標簽。

<#if item??>
? ? true:item值不為空
<#else>
? ? false:item值為null
</#if>

值得注意的是在freemarker自身的標簽中,是不需要${}的

2.freemarker中的${}與js中的${}沖突

在外面包裹上${r"..."}

${r"${person.name}"} 輸出js語句 ${person.name},如果沒有包裹的話,js會被渲染。

3.渲染數(shù)字時出現(xiàn)逗號分隔

渲染數(shù)字時freemarker 會自動每隔3位進行逗號分隔,使用${id?c}就不會了。

4.拼接渲染

${}內(nèi)是可以做計算的,也可以字符串拼接。如:${a+1},${str1+str2}。需要注意的是,如果內(nèi)部復(fù)合了其他方法,需要加上小括號。如${str1+(str2!'')}

5.將對象或數(shù)組渲染進js

因為${}渲染的都是靜態(tài)的字符串,如果想要js獲取到對象或數(shù)組,需要配合js自身的數(shù)組push方法結(jié)合渲染對象最小的單位形成一個插入方法(最小的單位不能是對象或數(shù)組,最小單位是字符串或數(shù)字等),

例如一個

?? ??? ?dbLinkData數(shù)組里面是多個
? ? ? ? ?{
? ? ? ? ? ? groupName: 'XXX',
? ? ? ? ? ? linkInfo: arr2
? ? ? ? ?} 對象
? ? ? ? ?而 arr2 又是一個數(shù)組內(nèi)部是多個
? ? ? ? ?{
? ? ? ? ? ? name:'XXX',
? ? ? ? ? ? url:'XXX'
? ? ? ? ? } 對象

解決方法如下:

? ? ?var listMember = "${dbLinkData?size}";
? ? ? ? var arr1 = [];
? ? ? ? if (listMember != 0) {
? ? ? ? ? <#list dbLinkData as item >
? ? ? ? ? ? var arr2=[];
? ? ? ? ? ? <#list item.linkInfo as items >
? ? ? ? ? ? arr2.push({
? ? ? ? ? ? ? name:'${items.name}',
? ? ? ? ? ? url:'${items.url}'
? ? ? ? ? })
? ? ? ? ? </#list>
? ? ? ? ? arr1.push({
? ? ? ? ? ? groupName: '${item.groupName}',
? ? ? ? ? ? linkInfo: arr2
? ? ? ? ? })
? ? ? ? </#list >
? ? ? ? }

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue Element UI + OSS實現(xiàn)上傳文件功能

    Vue Element UI + OSS實現(xiàn)上傳文件功能

    這篇文章主要為大家詳細介紹了Vue Element UI + OSS實現(xiàn)上傳文件功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Vue常用指令詳解分析

    Vue常用指令詳解分析

    這篇文章給大家詳細分析了關(guān)于VUE的常用的相關(guān)指令內(nèi)容,對此有需要的朋友們可以學(xué)習(xí)下。
    2018-08-08
  • 詳解在Vue.js編寫更好的v-for循環(huán)的6種技巧

    詳解在Vue.js編寫更好的v-for循環(huán)的6種技巧

    這篇文章主要介紹了詳解在Vue.js編寫更好的v-for循環(huán)的6種技巧,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 詳解vue+webpack+express中間件接口使用

    詳解vue+webpack+express中間件接口使用

    這篇文章主要介紹了詳解vue+webpack+express中間件接口使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • vue路由三種傳參方式詳細講解

    vue路由三種傳參方式詳細講解

    在Vue中有多種方式可以進行路由跳轉(zhuǎn)并傳遞參數(shù),這篇文章主要給大家介紹了關(guān)于vue路由三種傳參方式的相關(guān)資料,文中介紹的方法分別包括params傳參、query傳參(顯示傳參)以及props傳參(路由組件傳參),,需要的朋友可以參考下
    2023-10-10
  • Vue 中對圖片地址進行拼接的方法

    Vue 中對圖片地址進行拼接的方法

    今天小編就為大家分享一篇Vue 中對圖片地址進行拼接的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • bpmn-js在vue中的基本使用及操作功能

    bpmn-js在vue中的基本使用及操作功能

    這篇文章主要介紹了bpmn-js在vue中的基本使用及操作功能,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友跟隨小編一起看看吧
    2024-02-02
  • vue 指令和過濾器的基本使用(品牌管理案例)

    vue 指令和過濾器的基本使用(品牌管理案例)

    這篇文章主要介紹了vue-品牌管理案例-指令和過濾器的相關(guān)知識,文中通過代碼給大家介紹了過濾器的基本使用,需要的朋友可以參考下
    2019-11-11
  • vue用遞歸組件寫樹形控件的實例代碼

    vue用遞歸組件寫樹形控件的實例代碼

    最近在vue項目中遇到需要用樹形控件的部分,比如導(dǎo)航目錄是不確定的,所以必須要用樹形結(jié)構(gòu),下面腳本之家小編給大家?guī)砹藇ue用遞歸組件寫樹形控件的實例代碼,需要的朋友參考下吧
    2018-07-07
  • vue 添加和編輯用同一個表單,el-form表單提交后清空表單數(shù)據(jù)操作

    vue 添加和編輯用同一個表單,el-form表單提交后清空表單數(shù)據(jù)操作

    這篇文章主要介紹了vue 添加和編輯用同一個表單,el-form表單提交后清空表單數(shù)據(jù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08

最新評論