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 相关文章推荐
接收键盘指令的脚本
Jun 26 Javascript
JQuery1.4+ Ajax IE8 内存泄漏问题
Oct 15 Javascript
关于Mozilla浏览器不支持innerText的解决办法
Jan 01 Javascript
javascript中不提供sleep功能如何实现这个功能
May 27 Javascript
jQuery实现不断闪烁文字的方法
May 15 Javascript
JS随机调用指定函数的方法
Jul 01 Javascript
PageSwitch插件实现100种不同图片切换效果
Jul 28 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
Aug 26 Javascript
JS实现IE状态栏文字缩放效果代码
Oct 24 Javascript
详解如何从零开始搭建Express+Vue开发环境
Jul 17 Javascript
JS实现简单的星期格式转换功能示例
Jul 23 Javascript
如何解决webpack-dev-server代理常切换问题
Jan 09 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实现的MySQL数据浏览器
2007/03/11 PHP
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
php变量范围介绍
2012/10/15 PHP
php实现的debug log日志操作类实例
2016/07/12 PHP
mac系统下为 php 添加 pcntl 扩展
2016/08/28 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
JS实现QQ图片一闪一闪的效果小例子
2013/07/31 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
JS+CSS实现的经典圆角下拉菜单效果代码
2015/10/21 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
小程序清理本地缓存的方法
2018/08/17 Javascript
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
python使用递归解决全排列数字示例
2014/02/11 Python
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
Django中url的反向查询的方法
2018/03/14 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
女子职高个人自荐书
2014/02/01 职场文书
大二学生自我检讨书
2014/10/23 职场文书
秦兵马俑导游词
2015/02/02 职场文书
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技