1. 页面通信

Ralltiir 提供了页面间通信机制,这一机制的实现原理是广播。 广播目标的名字(View Name)在 options.name 中指定,也可以指定广播给所有页面(*)。

1.1. 注册是给定 name

rt.services.register('/zhaopin/position/:id', {
    name: 'baidu-zhaopin',
    title: '百度招聘'
});

这里的 name 在发送广播事件时,有两种用途:

  • 通过指定为 target(见下文)来发给注册为 "baidu-zhaopin" 的这些页面。
  • 省略 target 参数,默认发给与当前页面同样 name 的页面。

1.2. 发送广播事件

通过 <rt-view>.ralltiir.postMessage(msg, [target]) 接口可以发送广播事件。 参数如下:

  • msg:任何类型,最终会通过 event.data 传递给 rt.message 事件
  • targetString 类型(可选)
    • 如果不传,默认发送事件给与当前页面同样 name 的页面;
    • 如果值为 "*",发送事件给所有页面;
    • 其他任何情况,会发送事件给 name===target 的页面。
var view = document.querySelector('.rt-view.active');
// 发送给与当前页面同样 name 的一组页面;对于上面的例子,等价于:
// view.ralltiir.postMessage('something happened here!', 'baidu-zhaopin');
view.ralltiir.postMessage('something happened here!');
// 广播给所有 Ralltiir 页面
view.ralltiir.postMessage('something happened here!', '*');

这里是一个 Demo: https://github.com/Ralltiir/ralltiir-application-demo/blob/master/postmessage-2.html

1.3. 监听广播事件

页面通信事件通过 DOM 广播,在 .rt-view 上监听 rt.message 事件 即可。

var view = document.querySelector('.rt-view.active');
view.addEventListener('rt.message', function (event) {
    console.log('message received:', event.data);
});

这里是一个 Demo: https://github.com/Ralltiir/ralltiir-application-demo/blob/master/postmessage-1.html

results matching ""

    No results matching ""