如何使用自定义元素实现 Angular 的“盒子里的香蕉”双向绑定?

mat*_*ele 5 custom-element angular

我正在尝试构建一个将由 Angular 应用程序使用的自定义元素。自定义元素将接受一个道具并可能对其进行操作。

我的理解是,我可以使用“盒子里的香蕉”来处理这种绑定,也就是<custom-element [(foo)]="bar">转换为<custom-element [foo]="bar" (fooChange)="bar = newBar">,等等。

我的角度模板:

<an-el [(clicked)]="isClicked"></an-el>
<p>Did you click a button? {{ isClicked }}</p>
Run Code Online (Sandbox Code Playgroud)

我的自定义元素调度一个事件:

this.dispatchEvent(new CustomEvent('clickedChange', { bubbles: true, detail: true }));

但它似乎将整个 CustomEvent 绑定到isClicked

Did you click a button? [object CustomEvent]
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

这是我的应用程序(在 Chrome 中运行):https : //stackblitz.com/edit/angular-nlguf4

小智 0

我会将isClicked声明替换为:

private _isClicked = false;

public get isClicked() {
    return this._isClicked;
  }
public set isClicked(val: CustomEvent | boolean) {
    this._isClicked = typeof val === "boolean" ? val : val["detail"];
  }
Run Code Online (Sandbox Code Playgroud)