zoukankan      html  css  js  c++  java
  • 2017年试试Web组件化框架Omi

    Omi

    Open and modern framework for building user interfaces.

    --- * Omi的Github地址[https://github.com/AlloyTeam/omi](https://github.com/AlloyTeam/omi) * 如果想体验一下Omi框架,可以访问 [Omi Playground](http://alloyteam.github.io/omi/example/playground/) * 如果想使用Omi框架或者开发完善Omi框架,可以访问 [Omi使用文档](https://github.com/AlloyTeam/omi/tree/master/docs#omi使用文档) * 如果你想获得更佳的阅读体验,可以访问 [Docs Website](http://alloyteam.github.io/omi/website/docs.html) * 如果你懒得搭建项目脚手架,可以试试 [omi-cli](https://github.com/AlloyTeam/omi/tree/master/cli) * 如果你有Omi相关的问题可以 [New issue](https://github.com/AlloyTeam/omi/issues/new) * 如果想更加方便的交流关于Omi的一切可以加入QQ的Omi交流群(256426170)

    特性

    • 超小的尺寸,7 kb (gzip)
    • 局部CSS,HTML+ Scoped CSS + JS组成可复用的组件。不用担心组件的CSS会污染组件外的,Omi会帮你处理好一切
    • 更自由的更新,每个组件都有update方法,自由选择时机进行更新。你也可以和obajs或者mobx一起使用来实现自动更新。
    • 模板引擎可替换,开发者可以重写Omi.template方法来使用任意模板引擎
    • 完全面向对象,函数式和面向对象各有优劣,Omi使用完全的面向对象的方式来构建Web程序。
    • ES6+ 和 ES5都可以,Omi提供了ES6+和ES5的两种开发方案。你可以自有选择你喜爱的方式。

    通过npm安装

    npm install omi
    

    Hello World

    class Hello extends Omi.Component {
        constructor(data) {
            super(data);
        }
        style () {
            return  `
                <style>
                    h1{
                        cursor:pointer;
                    }
                </style>
             `;
        }
        handleClick(target, evt){
            alert(target.innerHTML);
        }
        render() {
            return  `
            <div>
                <h1 onclick="handleClick(this, event)">Hello ,{{name}}!</h1>
            </div>
            `;
    
        }
    }
    
    Omi.render(new Hello({ name : "Omi" }),"body");
    

    [点击这里->在线试试]

    你可以使用Omi.makeHTML来生成组件标签用于嵌套。

        Omi.makeHTML('Hello', Hello);
    

    那么你就在其他组件中使用,并且通过data-*的方式可以给组件传参,如:

      ...
      render() {
            return  `
            <div>
                <div>Test</div>
                <Hello data-name="Omi" />
            </div>
            `;
        }
        ...
    

    注意,style方法里面return包裹的<style></style>不是必须的。主要是方便识别成jsx文件时候有css语法高亮。

    [点击这里->在线试试]

    你可以使用 webpack + babel,在webpack配置的module设置babel-loader,立马就能使用ES6+来编写你的web程序。

    当然Omi没有抛弃ES5的用户,你可以使用ES5的方式编写Omi。

    ES5方式

    var Hello =  Omi.create("Hello", {
        style: function () {
            return "<style>h1{ cursor:pointer }</style>";
        },
        handleClick: function (dom) {
            alert(dom.innerHTML)
        },
        render: function () {
            return ' <div><h1 onclick="handleClick(this, event)">Hello ,{{name}}!</h1></div>'
        }
    });
    
    var Test =  Omi.create("Test", {
        render: function () {
            return '<div>
                        <div>Test</div>
                        <Hello data-name="Omi" />
                    </div>'
        }
    });
    
    Omi.render(new Test(),'#test');
    
    

    和ES6+的方式不同的是,不再需要makeHTML来制作标签用于嵌套,因为 Omi.create的第一个参数的名称就是标签名。

    [点击这里试试ES5写Omi程序]

    加入Omi吧!

    Github: https://github.com/AlloyTeam/omi

    I need you.

  • 相关阅读:
    leetcode 122. Best Time to Buy and Sell Stock II
    leetcode 121. Best Time to Buy and Sell Stock
    python 集合(set)和字典(dictionary)的用法解析
    leetcode 53. Maximum Subarray
    leetcode 202. Happy Number
    leetcode 136.Single Number
    leetcode 703. Kth Largest Element in a Stream & c++ priority_queue & minHeap/maxHeap
    [leetcode]1379. Find a Corresponding Node of a Binary Tree in a Clone of That Tree
    正则表达式
    十种排序算法
  • 原文地址:https://www.cnblogs.com/iamzhanglei/p/6372910.html
Copyright © 2011-2022 走看看