vue中双大括号替换的简单原理

Vue中双大括号解析的简单原理

Vue中主要思路思路就是三步:

  1. 获取所有节点
  2. 找到所有 {{ }} 的节点
  3. 替换 {{ }} 的内容

我们这里就简单一点,替换一个节点就可以了,我们先定义一个类似Vue的data对象。

<body>
<h1>{{user.name}}的数学成绩为{{user.test.math}}</h1>
<script>
    // 模仿Vue中的data属性,为一个对象
    let data={
        word:'hello',
        user:{
            name:'张三',
            test:{
                math:93
            }
        }
    }
</script>
</body>

首先获取这个节点,获取文本内容

let doc=document.querySelector('h1')
let str = doc.innerText  //{{user.name}}的数学成绩为{{user.test.math}}

然后我们需要去匹配所有的{{ }},这里我们采用正则,并且获取到{{ }}里面的内容。

str.replace(/\{\{(.+?)\}\}/g,(...args)=>{
        console.log(args)
    })

这里打印的args为一个数组,如下图
在这里插入图片描述
可以看到数组的第二个值就是双大括号的内容,就是我们要的东西,所以下一步就是把它转化为data里面的值就可以了。
我们定义一个方法getValue()来解析这种对象的值,这里传入对象类型的字符串,以“user.name”为例

function getValue(val){
		//val=user.name
		let arr=val.split('.') //['user','name']
        return arr.reduce((data,currentVal)=>{
            return data[currentVal]
        },data)
        //利用reduce方法,传入的初始值就是我们自己定义的data对象
        //currentVal为当前数组的值,第一次为'user',第二次为'name'
    }

我们定义好了方法,调用一下该方法就可以解析了

 let value=str.replace(/\{\{(.+?)\}\}/g,(...args)=>{
        return getValue(args[1])
    })

 function getValue(val){
        return val.split('.').reduce((data,currentVal)=>{
            return data[currentVal]
        },data)
    }
    
 console.log(value) //张三的数学成绩为93

最后一步就是把这个值赋值给该节点就可以了 ٩(๑>◡<๑)۶

doc.textContent=value

下面为完整的代码以及页面展示效果

<body>
<h1>{{user.name}}的数学成绩为{{user.test.math}}</h1>
<script>
    let data={
        word:'hello',
        user:{
            name:'张三',
            age:'18',
            test:{
                math:93
            }
        }
    }
    let doc=document.querySelector('h1')
    let str = doc.innerText
    let value=str.replace(/\{\{(.+?)\}\}/g,(...args)=>{
        return getValue(args[1])
    })
    function getValue(val){
        return val.split('.').reduce((data,currentVal)=>{
            return data[currentVal]
        },data)
    }
    doc.textContent=value
</script>
</body>

在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值