Omi v1.0.2发布正式支持传递javascript表达式


Posted in Javascript onMarch 21, 2017

写在前面

Omi框架可以通过在组件上声明 data-* 把属性传递给子节点。

Omi从设计之初,就是往标准的DOM标签的标准传递方式靠齐。比如:

  • 下划线自动转驼峰, data-page-index传到子组件就变成this.data.pageIndex
  • data-xx 传递到子节点全都变成字符串,如data-page-index="1"到子节点中this.data.pageIndex就是字符串"1"

这样会有什么局限性和问题?如:

  • 无法传递JSON
  • 无法传递number类型
  • 无法传递bool类型

那么支持传递javascript表达式就能解决这些痛点。

废话不多说,来看神器的冒号。

冒号标记

看下面例子:

import Hello from 'hello.js'
Omi.makeHTML('Hello', Hello);
class App extends Omi.Component {
 render() {
 return `
 <div>
 <Hello :data-user="{ name : 'Dntzhang', favorite : 'Omi' }" />
 </div>
 `
 }
}
Omi.render(new App(),"#container")

在data-user前面加上冒号即:data-user,就代表传递的是js 表达式,够方便吧。

然后在Hello组件内就可以直接使用。

class Hello extends Omi.Component {
 render() {
 return `
 <div>
 <h1>{{user.name}} love {{user.favorite}}.</h1>
 </div>
 `
 }
}

你也可以在hello组件内打印出 this.data.user 试试。

传递其他类型

上面的例子展示了传递JSON,其他类型也支持。比如:

<Hello :data-age="18" />
 <Hello :data-xxx="1+1*2/3" />
 <Hello :data-is-girl="false" />
 <Hello :data-array-test="[1,2,3]" />

复杂类型

最后给大家看个稍微一丁点复杂的案例:

class Hello extends Omi.Component {
 handleClick(evt){
 alert( this.data.arrayTest[0].name)
 }
 render() {
 return `
 <ul>
 {{#arrayTest}}
 <li onclick="handleClick">{{name}}</li>
 {{/arrayTest}}
 </ul>
 `;
 }
}
Omi.makeHTML('Hello', Hello);
class App extends Omi.Component {
 render() {
 return `
 <div>
 <Hello :data-array-test="[{name:'dntzhang'},{name:'omi'},{name:'AlloyTeam'}]" />
 </div>
 `;
 }
}
Omi.render(new App(),"#container");

当然,在子组件中,你也可以不使用 mustache.js模板引擎的语法去遍历,使用ES6+的姿势去遍历。

class Hello extends Omi.Component {
 render() {
 return `
 <ul>
 ${this.data.arrayTest.map(item =>
 `<li>${item.name}</li>`
 ).join('')}
 </ul>
 `;
 }
}

这也是为什么omi提供了两个版本,omi.js和omi.lite.js的原因。omi.lite.js不包含mustache.js模板引擎。

以上所述是小编给大家介绍的Omi v1.0.2发布正式支持传递javascript表达式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js控制div及网页相关属性的代码
Dec 19 Javascript
Jquery中对数组的操作代码
Aug 12 Javascript
关于jQuery的inArray 方法介绍
Oct 08 Javascript
JS定时刷新页面及跳转页面的方法
Jul 04 Javascript
jquery中prop()方法和attr()方法的区别浅析
Sep 06 Javascript
jquery Validation表单验证使用详解
Sep 12 Javascript
Yarn的安装与使用详细介绍
Oct 25 Javascript
Javascript 对cookie操作详解及实例
Dec 29 Javascript
JavaScript使用readAsDataUrl方法预览图片
May 10 Javascript
如何在js代码中消灭for循环实例详解
Jul 29 Javascript
微信小程序vant弹窗组件的实现方式
Feb 21 Javascript
Element Badge标记的使用方法
Jul 27 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
Mar 21 #jQuery
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
Mar 21 #jQuery
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
Mar 21 #jQuery
80%应聘者都不及格的JS面试题
Mar 21 #Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
Mar 21 #jQuery
JavaScript中的普通函数和箭头函数的区别和用法详解
Mar 21 #Javascript
JavaScript 中 apply 、call 的详解
Mar 21 #Javascript
You might like
第五节 克隆 [5]
2006/10/09 PHP
java解析json方法总结
2019/05/16 PHP
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
js下用gb2312编码解码实现方法
2009/12/31 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
JS搜狐面试题分析
2016/12/16 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
详解vue-router和vue-cli以及组件之间的传值
2017/07/04 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
javascript实现页面的实时时钟显示示例
2020/08/06 Javascript
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
利用python实现命令行有道词典的方法示例
2017/01/31 Python
浅析python的优势和不足之处
2018/11/20 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
详解python-图像处理(映射变换)
2019/03/22 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
太太口服液广告词
2014/03/20 职场文书
供货协议书
2014/04/22 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS
你需要掌握的20个Python常用技巧
2022/02/28 Python