這篇文章給大家分享的是有關TP中JS怎么獲取模板變量的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
在使用PHP框架(本文以ThinkPHP為例)進行頁面開發的時候,經常遇到需要將控制器方法中的模板變量代入到頁面JS內操作的情況,常見的方式如:
let admin={:json_encode($admin)}, //$admin是php數組
level={$level};
console.log(admin, level);這種方式確實是可以取到值的,只是存在幾個問題
模板變量的語法放在js中,編輯器會報語法錯誤
當采用編輯器的自動格式化功能時,模板變量的聲明結構會被破壞,從而影響了自動格式化代碼功能的使用
不夠美觀
在實踐中比較推薦的方式是:將模板變量存到特定的節點中,然后由全局方法將其轉成全局的變量,最后需要用到這些變量的方法再讀取這些全局變量。下面以一個完整的模板為例:
<!DOCTYPE html>
<html lang ="en">
<head>
<meta charset="UTF-8">
<title>PHP框架中JS優雅獲取模板變量的方式</title>
<style>
/* 通用的模板數據存放標簽,視覺不可見 */
.data-box {
display: none;
}
</style>
</head>
<body>
<!-- 頁面內容 -->
<h3>Hi,結果請看console</h3>
<!-- 數據存儲節點,可以同時存在多個data屬性 -->
<!-- 如果模板變量是數組,須先轉成json字符串(如$admin) -->
<div class="data-box" data-admin='{:json_encode($admin)}' data-level='{$level}'></div>
<script>
/* 獲取數據的操作 */
/* 初始化頁面渲染時傳過來的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格式的字串才轉對象
});
/**
* 判斷字串是否屬于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>
/* 使用數據 */
//所有保存到數據節點的變量都成為`dataBox`對象的屬性
console.log(dataBox.admin, dataBox.level);
</script>
</body>
</html>實際開發中,我會將這里的css和獲取數據的js操作放置在全局的母模板中,然后具體的子模板只要繼承了母模板就可以使用該功能,方便代碼的復用。
感謝各位的閱讀!關于“TP中JS怎么獲取模板變量”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。