@@ -476,15 +476,23 @@ person.facepalmWithoutWarning();
476
476
我们可以使用修饰器,使得对象的方法被调用时,自动发出一个事件。
477
477
478
478
``` javascript
479
- import postal from " postal/lib/postal.lodash" ;
479
+ const postal = require ( " postal/lib/postal.lodash" ) ;
480
480
481
481
export default function publish (topic , channel ) {
482
+ const channelName = channel || ' /' ;
483
+ const msgChannel = postal .channel (channelName);
484
+ msgChannel .subscribe (topic, v => {
485
+ console .log (' 频道: ' , channelName);
486
+ console .log (' 事件: ' , topic);
487
+ console .log (' 数据: ' , v);
488
+ });
489
+
482
490
return function (target , name , descriptor ) {
483
491
const fn = descriptor .value ;
484
492
485
493
descriptor .value = function () {
486
494
let value = fn .apply (this , arguments );
487
- postal . channel (channel || target . channel || " / " ) .publish (topic, value);
495
+ msgChannel .publish (topic, value);
488
496
};
489
497
};
490
498
}
@@ -495,29 +503,37 @@ export default function publish(topic, channel) {
495
503
它的用法如下。
496
504
497
505
``` javascript
498
- import publish from " path/to/decorators/publish" ;
506
+ // index.js
507
+ import publish from ' ./publish' ;
499
508
500
509
class FooComponent {
501
- @publish (" foo.some.message" , " component" )
510
+ @publish (' foo.some.message' , ' component' )
502
511
someMethod () {
503
- return {
504
- my: " data"
505
- };
512
+ return { my: ' data' };
506
513
}
507
- @publish (" foo.some.other" )
514
+ @publish (' foo.some.other' )
508
515
anotherMethod () {
509
516
// ...
510
517
}
511
518
}
519
+
520
+ let foo = new FooComponent ();
521
+
522
+ foo .someMethod ();
523
+ foo .anotherMethod ();
512
524
```
513
525
514
526
以后,只要调用` someMethod ` 或者` anotherMethod ` ,就会自动发出一个事件。
515
527
516
- ``` javascript
517
- let foo = new FooComponent ();
518
-
519
- foo .someMethod () // 在"component"频道发布"foo.some.message"事件,附带的数据是{ my: "data" }
520
- foo .anotherMethod () // 在"/"频道发布"foo.some.other"事件,不附带数据
528
+ ``` bash
529
+ $ bash-node index.js
530
+ 频道: component
531
+ 事件: foo.some.message
532
+ 数据: { my: ' data' }
533
+
534
+ 频道: /
535
+ 事件: foo.some.other
536
+ 数据: undefined
521
537
` ` `
522
538
523
539
# # Mixin
0 commit comments