之前一直用vue和react框架去开发,对于数据的传递都是通过Prop的方式或者是申明一个事件然后在需要的地方触发一下,数据比较庞大的时候,同时也需要多个组件之间进行共享,vuex, redux 也是不错的选择。
(子===>>父传递)但是有种场景,数据不是很大,然后只是个别数据需要多个组件之间共享,如果因为这个需求就引入Vuex,redux那就太小题大做了,传统的方式就是逐层上传,然后通过有关联的父组件进行向下传递,直到目标组件,可以是可以,就是想想都不想写。。。
这个时候就需要全局的方法,去触发和监听:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| window.onMessage = function(name,callback){ var msgs = window.onMessage[name] = window.onMessage[name] || []; if(msgs.indexOf(callback)===-1){ msgs.push(callback); } };
window.sendMessage = function(name,param){ var msgs = window.onMessage[name] || []; msgs.forEach(function(msg){ msg(param); }) };
window.removeMessage = function(name,callback){ if(callback && window.onMessage[name]){ window.onMessage[name].forEach(function(fun,index){ if(fun===callback){ window.onMessage[name].splice(index,1); } }) }else{ delete window.onMessage[name]; } };
|
监听的方式:
1 2 3 4 5 6 7
| window.onMessage( 'st', function(data){ console.log(data) }); window.onMessage( 'st', function(data){ console.log(data) }); window.sendMessage('st', '111');
|
控制台打印结果:
