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 相关文章推荐
javascript中的取反再取反~~没有意义
Apr 06 Javascript
jquery 实现input输入什么div图层显示什么
Jun 15 Javascript
js识别不同浏览器基于userAgent做判断
Jul 29 Javascript
js获取时间并实现字符串和时间戳之间的转换
Jan 05 Javascript
JavaScript数组Array对象增加和删除元素方法总结
Jan 20 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
Nov 24 Javascript
js实现密码强度检测【附示例】
Mar 30 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
Apr 28 Javascript
微信小程序联网请求的轮播图
Jul 07 Javascript
基于Swiper实现移动端页面图片轮播效果
Dec 28 Javascript
AngularJS中重新加载当前路由页面的方法
Mar 09 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
May 28 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
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
php分页函数完整实例代码
2014/09/22 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
PHP执行系统命令函数实例讲解
2021/03/03 PHP
跟随鼠标旋转的文字
2006/11/30 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
Python urlopen()函数 示例分享
2014/06/12 Python
Python可变参数用法实例分析
2017/04/02 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
PyTorch预训练的实现
2019/09/18 Python
在python中利用try..except来代替if..else的用法
2019/12/19 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
英国在线花园中心:You Garden
2018/06/03 全球购物
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
金融专业应届生求职信
2013/11/02 职场文书
物流司机岗位职责
2013/12/28 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
MySQL分库分表详情
2021/09/25 MySQL