gpt4 book ai didi

javascript - 如何以编程方式打开 d3 元素的 ngbootstrap 弹出窗口?

转载 作者:行者123 更新时间:2023-11-28 14:46:30 27 4
gpt4 key购买 nike

我想在鼠标悬停时为 D3 元素打开一个弹出窗口。

本质上,这意味着我的 component.html 文件几乎是空的,仅包含弹出窗口模板:

<ng-template #popContent let-greeting="greeting">{{greeting}}, <b>{{name}}</b>!</ng-template>

我无法使用通常的方法

[ngbPopover]="popContent" popoverTitle="Greeting" #p="ngbPopover" triggers="manual"

属性,因为目标 D3 元素尚不存在

我需要的是能够以某种方式调用弹出窗口的打开函数并传递弹出窗口内容和位置。我的组件中是这样的:

public showPopover(node, text){ // node is the DOM element for which to show popover
... what should go here? ...
}

最佳答案

API 似乎没有提供在 dynamic elements 上创建弹出窗口的方法(参见容器)。由于 Angular 希望您避免直接访问 DOM,因此您必须通过模板创建弹出窗口。因此,我会在“空白”元素上创建它,然后将其移动到动态元素。也就是说,一旦移动它,您就必须手动触发它,因为事件都将位于“空白”元素上。像这样的事情:

模板

<!-- empty span to create the popover on -->
<!-- note the "manual" trigger -->
<span ngbPopover="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." popoverTitle="Popover on top"
#popover="ngbPopover" triggers="manual">
</span>

<div #base></div> <!-- where my dynamic element will go -->

Controller

import {NgbPopover} from '@ng-bootstrap/ng-bootstrap';
import {Component, ViewChild, ngAfterViewInit, ElementRef, Renderer2} from '@angular/core';

@Component({
selector: 'ngbd-popover-tplwithcontext',
templateUrl: 'src/popover-tplwithcontext.html'
})

export class NgbdPopoverTplwithcontext implements ngAfterViewInit {

@ViewChild('popover') public popover: NgbPopover;
@ViewChild('base') el:ElementRef;

ngAfterViewInit(){

// create dynamic element
let s = d3.select(this.el.nativeElement)
.append('button')
.html('Dynamically Added!')
// manual open
.on('click', () => { this.openPop(); })

// assign popover our new element
this.popover._elementRef = new ElementRef(s.node());
}

// handle the opening/closing
public openPop(): void {
console.log(this)
this.popover.isOpen() ? this.popover.close() : this.popover.open();
}
}

这是一个running example .

关于javascript - 如何以编程方式打开 d3 元素的 ngbootstrap 弹出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46192207/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com