您好,登录后才能下订单哦!
这篇文章给大家分享的是有关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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。