您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)TP中JS怎么獲取模板變量的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
在使用PHP框架(本文以ThinkPHP為例)進(jìn)行頁(yè)面開(kāi)發(fā)的時(shí)候,經(jīng)常遇到需要將控制器方法中的模板變量代入到頁(yè)面JS內(nèi)操作的情況,常見(jiàn)的方式如:
let admin={:json_encode($admin)}, //$admin是php數(shù)組 level={$level}; console.log(admin, level);
這種方式確實(shí)是可以取到值的,只是存在幾個(gè)問(wèn)題
模板變量的語(yǔ)法放在js中,編輯器會(huì)報(bào)語(yǔ)法錯(cuò)誤
當(dāng)采用編輯器的自動(dòng)格式化功能時(shí),模板變量的聲明結(jié)構(gòu)會(huì)被破壞,從而影響了自動(dòng)格式化代碼功能的使用
不夠美觀
在實(shí)踐中比較推薦的方式是:將模板變量存到特定的節(jié)點(diǎn)中,然后由全局方法將其轉(zhuǎn)成全局的變量,最后需要用到這些變量的方法再讀取這些全局變量。下面以一個(gè)完整的模板為例:
<!DOCTYPE html> <html lang ="en"> <head> <meta charset="UTF-8"> <title>PHP框架中JS優(yōu)雅獲取模板變量的方式</title> <style> /* 通用的模板數(shù)據(jù)存放標(biāo)簽,視覺(jué)不可見(jiàn) */ .data-box { display: none; } </style> </head> <body> <!-- 頁(yè)面內(nèi)容 --> <h3>Hi,結(jié)果請(qǐng)看console</h3> <!-- 數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),可以同時(shí)存在多個(gè)data屬性 --> <!-- 如果模板變量是數(shù)組,須先轉(zhuǎn)成json字符串(如$admin) --> <div class="data-box" data-admin='{:json_encode($admin)}' data-level='{$level}'></div> <script> /* 獲取數(shù)據(jù)的操作 */ /* 初始化頁(yè)面渲染時(shí)傳過(guò)來(lái)的js變量 */ let dataContainerElem = document.querySelector('.data-box'), data = dataContainerElem ? dataContainerElem.dataset : {}, dataBox = {}; //模板變量容器,`.data-box`類選擇器所在的所有`data`屬性值集合 Object.keys(data).forEach(function (key) { dataBox[key] = data[key]; if (isJsonString(data[key])) dataBox[key] = JSON.parse(data[key]); //是json格式的字串才轉(zhuǎn)對(duì)象 }); /** * 判斷字串是否屬于json字串 */ function isJsonString(str) { let flag = false; if (typeof str != 'string') return flag; try { JSON.parse(str); flag = true; } catch (e) {} return flag; } </script> <script> /* 使用數(shù)據(jù) */ //所有保存到數(shù)據(jù)節(jié)點(diǎn)的變量都成為`dataBox`對(duì)象的屬性 console.log(dataBox.admin, dataBox.level); </script> </body> </html>
實(shí)際開(kāi)發(fā)中,我會(huì)將這里的css和獲取數(shù)據(jù)的js操作放置在全局的母模板中,然后具體的子模板只要繼承了母模板就可以使用該功能,方便代碼的復(fù)用。
感謝各位的閱讀!關(guān)于“TP中JS怎么獲取模板變量”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。