亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue+freemarker中遇到的坑及解決

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

vue+freemarker遇到的坑

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

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

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

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

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

在這個(gè)過(guò)程中遇到了幾個(gè)坑

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

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

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

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

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.

后來(lái)上網(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明明是有值的,到瀏覽器中頁(yè)面上卻不顯示。

原因是因?yàn)檫@個(gè)input被vue的model綁定了,到瀏覽器中vue把數(shù)據(jù)清空了,雖然在開(kāi)發(fā)者工具中仍可以看到input的value屬性是有值的,但是頁(yè)面是不顯示的,vue的對(duì)象中data中也沒(méi)有值。

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

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

freemarker的一些坑問(wèn)題

1.對(duì)空對(duì)象十分敏感

freemarker對(duì)空值敏感,當(dāng)我們的值為空時(shí),會(huì)拋出異常。

解決辦法是:

1.${item!''} 當(dāng)item為null時(shí)渲染為空字符串,不為空則渲染自身值。

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

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

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

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

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

${r"${person.name}"} 輸出js語(yǔ)句 ${person.name},如果沒(méi)有包裹的話,js會(huì)被渲染。

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

渲染數(shù)字時(shí)freemarker 會(huì)自動(dòng)每隔3位進(jìn)行逗號(hào)分隔,使用${id?c}就不會(huì)了。

4.拼接渲染

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

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

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

例如一個(gè)

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

解決方法如下:

? ? ?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 >
? ? ? ? }

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

相關(guān)文章

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

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

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

    Vue常用指令詳解分析

    這篇文章給大家詳細(xì)分析了關(guān)于VUE的常用的相關(guān)指令內(nèi)容,對(duì)此有需要的朋友們可以學(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種技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 詳解vue+webpack+express中間件接口使用

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

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

    vue路由三種傳參方式詳細(xì)講解

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

    Vue 中對(duì)圖片地址進(jìn)行拼接的方法

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

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

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

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

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

    vue用遞歸組件寫樹(shù)形控件的實(shí)例代碼

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

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

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

最新評(píng)論