创建支持tap事件的NativeScript Angular组件的正确方法是什么?

时间:2019-08-01 12:39:55

标签: angular nativescript nativescript-angular

假设以下简单模板:

import { Component, OnInit } from '@angular/core';

@Component({
    selector: 'test-component',
    template: '<Label text="Test me"></Label>'
})
export class TestComponent implements OnInit {
}

如何添加对这种用法的支持:

<test-component (tap)="onTap($event)"></test-component>

我尝试过:

添加点击事件并将组件模板包装在StackLayout

import { Component, OnInit } from '@angular/core';

@Component({
    selector: 'test-component',
    template: '<StackLayout (tap)="passTap(e)"><Label text="Test me"></Label></StackLayout>'
})
export class TestComponent implements OnInit {
    @Output() public tap = new EventEmitter();
    pressTap(event: any) {
        this.tap.emit(event);
    }
}

但这会产生奇怪的结果,有时会发出两次事件,并且在iOS和Android上似乎不一致。感觉也很笨拙。

将我的元素注册为支持点击的各种内容,例如StackLayout,或者我希望LayoutBase

import { registerElement} from "nativescript-angular/element-registry";

registerElement('test-component', () => LayoutBase);

我还尝试使Angular组件扩展LayoutBase等,然后尝试映射this.on("tap", ...),但没有任何反应。

有没有正确的方法来支持这一点?我错过了难以置信的明显东西吗?

0 个答案:

没有答案