如何将自定义事件添加到 NativeScript UI 插件

How to add a custom event to a NativeScript UI plugin

在 NativeScript 中为 UI 插件定义自定义事件需要什么?

我想要实现的是触发一个 foo 事件,它的工作方式类似于 Button 上的 tap 事件,并且可以按如下方式连接:

<Page xmlns="http://schemas.nativescript.org/tns.xsd"
      xmlns:fooplugin="nativescript-foo-plugin">
  <StackLayout>
    <Button text="Tap Me!" tap="{{ onTap }}" />
    <fooplugin:FooPlugin foo="{{ onFoo }}" />
  </StackLayout>
</Page>

我所做的基本上归结为从插件代码中使用 eventNamefoo 调用 notify 函数(忽略内存泄漏注意事项):

import * as view from 'ui/core/view';

export class FooPlugin extends view.View {
  constructor() {
    super();

    setTimeout(() => {
      this.notify({
        eventName: 'foo',
        object: this,
      });

      // also tried this._emit('foo');
    }, 1000);
  }
}

还有什么我遗漏的,我需要做的才能完成这项工作吗?

创建 属性 public static fooEvent="foo" 属性 的名称很重要它应该是 eventname+ Event 现在它应该可以工作了。

  1. 为您的活动 public static fooEvent="foo" 创建一个 属性。名字很重要!必须是 eventname + "Event"

  2. 在声明文件 index.d.tsFooPlugin.d.ts

    中重载 on 函数

    // Needed when on method is overriden. on(eventNames: string, callback: (data: EventData) => void, thisArg?: any);