js.php页面框架购买,PHP框架中JS优雅获取模板变量的方式

在使用PHP框架(本文以ThinkPHP为例)进行页面开发的时候,经常遇到需要将控制器方法中的模板变量代入到页面JS内操作的情况,常见的方式如:

let admin={:json_encode($admin)}, //$admin是php数组

level={$level};

console.log(admin, level);

这种方式确实是可以取到值的,只是存在几个问题

模板变量的语法放在js中,编辑器会报语法错误

当采用编辑器的自动格式化功能时,模板变量的声明结构会被破坏,从而影响了自动格式化代码功能的使用

不够美观

在实践中比较推荐的方式是:将模板变量存到特定的节点中,然后由全局方法将其转成全局的变量,最后需要用到这些变量的方法再读取这些全局变量。下面以一个完整的模板为例:

PHP框架中JS优雅获取模板变量的方式

/* 通用的模板数据存放标签,视觉不可见 */

.data-box {

display: none;

}

Hi,结果请看console

/* 获取数据的操作 */

/* 初始化页面渲染时传过来的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;

}

/* 使用数据 */

//所有保存到数据节点的变量都成为`dataBox`对象的属性

console.log(dataBox.admin, dataBox.level);

实际开发中,我会将这里的css和获取数据的js操作放置在全局的母模板中,然后具体的子模板只要继承了母模板就可以使用该功能,方便代码的复用。

以上就是我本次的分享,如果大家还有其它方法也欢迎留言分享出来哦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值