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中如何调用JSP中的变量
Jan 22 Javascript
angularjs的一些优化小技巧
Dec 06 Javascript
js 左右悬浮对联广告特效代码
Dec 12 Javascript
JavaScript的jQuery库中ready方法的学习教程
Aug 14 Javascript
js常用的继承--组合式继承
Mar 06 Javascript
详解vue-cli + webpack 多页面实例应用
Apr 25 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
May 08 Javascript
JS高级技巧(简洁版)
Jul 29 Javascript
js使用Promise实现简单的Ajax缓存
Nov 14 Javascript
JS实现的简单tab切换功能完整示例
Jun 20 Javascript
基于VUE实现判断设备是PC还是移动端
Jul 03 Javascript
vue实现移动端拖动排序
Aug 21 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使用sql server验证连接数据库的方法
2014/12/25 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
JavaScript中令你抓狂的魔术变量
2006/11/30 Javascript
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
Python多线程编程简单介绍
2015/04/13 Python
详解常用查找数据结构及算法(Python实现)
2016/12/09 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
Python-opencv 双线性插值实例
2020/01/17 Python
什么是Python中的顺序表
2020/06/02 Python
html5新特性与用法大全
2018/09/13 HTML / CSS
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
蛋白质世界:Protein World
2017/11/23 全球购物
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
元旦联欢会感言
2014/03/04 职场文书
《苏珊的帽子》教学反思
2014/04/07 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python