• h******* 登录了本站
  • s**u 下载了资源 烽火娱乐多语言彩票娱乐城源码/FS娱乐城+系统彩+活动返水+聊天室28游戏+IM即时通讯+合买跟单/前端vue编译后+后端PHP
  • s**u 下载了资源 烽火娱乐多语言彩票娱乐城源码/FS娱乐城+系统彩+活动返水+聊天室28游戏+IM即时通讯+合买跟单/前端vue编译后+后端PHP
  • 奇*猫 下载了资源 免费2025彩虹易支付前端新模板美化版源码免费下载
  • 奇*猫 下载了资源 价值300元2025新版免登入注册成人用品商城系统源码/性用品商城系统/情趣用品商城
  • 奇*猫 下载了资源 【全开源】跑腿小程序/智能派单/系统派单/同城配送/校园跑腿/预约取件/用户端+骑手端
  • 奇*猫 下载了资源 SSL证书管理系统工具网站源码,自动申请、部署SSL证书,并在证书即将过期时自动
  • 奇*猫 下载了资源 全开源TikTok跨境商城源码/TikTok内嵌商城源码 前端uniapp+后端
  • 奇*猫 下载了资源 价值800元的【修复版】红娘金媒10.3.1婚恋相亲系统源码+安装教程
  • 奇*猫 下载了资源 仿天涯论坛系统源码带后台 支持打包APP安装包 开放式PHP原生态模板

在avalon1中,存在四种数据填充的手段 {{expr}}, {{expr|html}}, ms-text, ms-html 其实第一种与第三种一样,用于输出纯文本,第二种与第四种一样,如果用户的数据是一些HTML标签,那么会转换成元素节点插入到当前位 …

在avalon1中,存在四种数据填充的手段

{{expr}}, {{expr|html}}, ms-text, ms-html

其实第一种与第三种一样,用于输出纯文本,第二种与第四种一样,如果用户的数据是一些HTML标签,那么会转换成元素节点插入到当前位置。

在avalon2中,只有三种数据填充的手段,原第二种使用html过滤器的方式由于在虚拟DOM不好实现,被移除。

<!DOCTYPE html>
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="./dist/avalon.js"></script>
        <script>
            var vm1 = avalon.define({
                $id: "test",
                a: 111,
                b: 222
            })
        
        
        </script>
        <style>
            .ms-controller{
                display:none;
            }
        </style>
    </head>
    <body>
        <div ms-controller="test">
            <p><input ms-duplex="@a" />{{@a}}<strong ms-text="@a"></strong></p>
            <p><input ms-duplex="@b" /><span>{{@b}}</span><span ms-html="@b"></span></p>
        </div>
    </body>
</html>

我们按F12,看控制台的情况

可见ms-html的威力,但这是一个性能消耗比较严重的指令,像react,估计让相应的指令名设计得很长,不让人们用它:

var content='<strong>content</strong>';    
 
React.render(
    <div dangerouslySetInnerHTML={{__html: content}}></div>,
    document.body
);

这是因为HTML中,用户存在很大的自由,可以随意加onclick, src=”data:text/html;base64,SGVsbG8sIFdvcmxkIQ%3D%3D”,script标签,从而做各种破坏活动。因此avalon2也不建议人们大量使用它。

如果你一定要用,那最好使用sanitize过滤器进行XSS处理

<p ms-html="@html | sanitize"></p>

此外值得注意的是,当然我们将插值表达式{{}}应用于网站首屏时,有时由于网络慢的缘故,会出大量的乱码现象(就是{{@b}}让用户看到了),这时我们有两个办法。

第一个方法,添加ms-controller类名,将当前区域先隐藏起来,avalon扫描到这里后会自动隐藏它们的。

 .ms-controller{
     display:none;
 }

注意这样式必须写head的上方,方便它第一时间被应用。

第二个方法,使用ms-text代替{{}},这个最省心最有效,比第一个效果好。

数据填充是传统静态模板的最基础功能。因此你在混用avalon与其他后端模板时,会出现冲突,大家都使用 {{}}做界定符。这时我们可以使用以下方式配置界定符,注意,这个脚本也在放在head前面,或保证你在扫描前运行它。

avalon.config({
   interpolate:["{%","%}"]
})

此时,我们可以通过avalon.config.openTag, avalon.config.closeTag得到“{%”,”%}”。注意,界定符里面千万别出现<, >,因为这存在兼容性问题。这两个界定符也不能一样,最好它们的长度都大于1。

在线客服请认准 @Pan10yuanma   👈直接点击联系客服,注意核实账号!!!

 
显示验证码
没有账号?注册  忘记密码?