Omi框架学习之旅 - 通过omi-id来实现组件通讯 及原理说明

这个demo是通过omi-id来获取子类的实例,然后更改data属性,之后updata一下就好了。

老规矩:先上demo代码, 然后提出问题, 之后解答问题, 最后源码说明。

        class Hello extends Omi.Component {
            constructor(data) {
                super(data);
            }

            style() {
                return `
                    h1 {
                        cursor: pointer;
                    }
                `;
            }

            handleClick(target, click) {
                console.log(target.innerHTML);
            }

            render() {
                return `
                    <div>
                        <h1 οnclick="handleClick(this, event)">
                            Hello, {{name}}!
                        </h1>
                    </div>
                `;
            }
        };

        Omi.makeHTML('Hello', Hello);

        class App extends Omi.Component {
            constructor(data) {
                super(data);
            }

            installed() {
                Omi.get('hello').data.name = 'Sorrow.X';    // get方法是Omi上的一个静态方法
                this.update();
            }

            

            render() {
                return `
                    <div>
                        <Hello omi-id="hello" />   
                    </div>
                `;
            }
        };

        var app = new App();
        Omi.render(app, 'body');

结果也一样哈

 

demo的疑问和疑问的说明:

疑问1:

<Hello omi-id="hello" />中的omi-id是什么鬼?对应的hello又是什么鬼?

答:

      都是好鬼,而且都是女鬼。

      omi-id呢,其实会把它对应的属性值就是hello,hello其实就是 Hello类的实例,然后呢就把 hello: Hello实例,放到了Omi.mapping = {};这个对象去了。

      我们怎么取出实例呢,通过omi的静态get方法即可。

    Omi.get = function(name){
        return Omi.mapping[name]
    }

      来看看怎么实现的,如下

 

 

在这里给我们添加进Omi.mapping中的

 

 

然后就这么拿到了。

再然后女鬼就是你的了。

 

ps: 

    omi-id,是我个人比较喜欢的,因为可以跨组件拿到实例,然后想干嘛就干嘛,爽歪歪。

转载于:https://www.cnblogs.com/sorrowx/p/6606051.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值