简体   繁体   English

从角2组件以编程方式打开ngbpopover

[英]programmatically open ngbpopover from angular 2 component

I am following this article to get bootstrap working with Angular 2. While that works as per article there is no example of how to pass the reference of the popover to a component method. 我正在关注这篇文章,以使引导程序可以与Angular 2一起使用。尽管按照文章的介绍可以工作,但是没有如何将弹出窗口的引用传递给组件方法的示例。 All I got was an NgbPopoverConfig but that doesn't have the reference to open the popover. 我所得到的只是一个NgbPopoverConfig但是没有打开弹出窗口的引用。

This is my component method 这是我的组件方法

popOpen(p : NgbPopoverConfig): void {

    p.open(); //get an error here saying no Open method on NgbPopoverConfig
 }

and this is my html where I am using a material 2 based input field. 这是我在html中使用基于材料2的输入字段的位置。

<md-input type="email"  value=""  name="em" id="em" placement="left" ngbPopover="adfga"  popoverTitle="Popover on left" triggers="manual" #p="ngbPopover" (click)="p.Open()"  [(ngModel)]="thisModel.email" 
                          #this="ngModel">
</md-input>

Any documentation on how to Programatically open and close the popover from the typescript component code? 是否有任何有关如何以编程方式从打字稿组件代码打开和关闭弹出窗口的文档? or some sample code? 或一些示例代码?

I am using angular 2.1.0 with Bootstrap 4.0.0-alpha.5 and angular material 2.0.0-alpha.9-3 我正在将Bootstrap 4.0.0-alpha.5和angular material 2.0.0-alpha.9-3与angular 2.1.0一起使用

Seems you mistyped: it should be open instead of Open . 您输入的内容似乎不正确:应该是open而不是Open Javascript is case sensitive JavaScript区分大小写

Plunker Example 柱塞示例

Solved it. 解决了。 There were two things I had to do. 我必须做两件事。 First get the reference to ngbPopover 首先获取对ngbPopover的引用

import {NgbPopover } from '@ng-bootstrap/ng-bootstrap/popover/popover';

and change my component method to: 并将我的component方法更改为:

popOpen(p : NgbPopover): void {

    p.open();  
 }

then register the even handler like so: 然后像这样注册偶数处理程序:

<md-input type="email"  value=""  name="em" id="em" placement="left" ngbPopover="adfga"  popoverTitle="Popover on left" triggers="manual" #p="ngbPopover" (blur)="edit=!edit; checkExists(p)"  [(ngModel)]="thisModel.email" 
                          #this="ngModel">
</md-input>

Now when I lose control of the textbox, I will have a component method called that will check if email exists and if yes, I can now use the reference of p to fire the open() method. 现在,当我失去对文本框的控制时,我将使用一个名为component的方法,该方法将检查电子邮件是否存在,如果是,则现在可以使用p的引用来触发open()方法。

I would like to know more about this edit=!edit; 我想进一步了解此edit=!edit; Does anyone know why this creates the magic that registers the blur event? 有谁知道为什么这会创造出记录模糊事件的魔力?

There are a few things that you need to do to use close or open API if your environment is below: 如果您的环境在以下位置,则需要执行一些操作才能使用关闭或打开的API:

ng-bootstrap: 1.xx,Angular: 5.0.2,Bootstrap CSS: 4.0.0 ng-bootstrap:1.xx,Angular:5.0.2,Bootstrap CSS:4.0.0

in your component.ts , you need to import 'NgbPopover': 在您的component.ts中 ,您需要导入'NgbPopover':

import {NgbPopover } from '@ng-bootstrap/ng-bootstrap';

  openPop(p : NgbPopover): void {
    this.popover.isOpen() ? this.popover.close() : this.popover.open();
  }

in your HTML template, 在您的HTML模板中,

<button #popover="ngbPopover" placement="bottom" ngbPopover="adfga"  popoverTitle="Popover on left" triggers="manual" (click)="openPop(popover)"></button>

However, if your environment is different, you might need to check their official document to see what changes they implement. 但是,如果您的环境不同,则可能需要检查其正式文档以查看其实施了哪些更改。

Here is the code that work for me 这是对我有用的代码

import {Component} from '@angular/core';
import {NgbPopover } from '@ng-bootstrap/ng-bootstrap/popover/popover';
@Component({
  selector: 'ngbd-popover-triggers',
  templateUrl: './popover-triggers.html'
})
export class NgbdPopoverTriggers {
condition : boolean = true;
  openPop(popover : NgbPopover): void {
    console.log(this.condition);
    popover.isOpen() ? popover.close() : popover.open();
  }
}

And the HTML code for the component 以及该组件的HTML代码

<br>
<br>
<br>
<br> 



<div>
<ng-template #popContent>Hello, <b>{{name}}</b>!
<button (click)="onClickYes()" type="button" class="btn btn-outline-secondary" >
  Yes
</button>
<button (click)="onClickNo()" type="button" class="btn btn-outline-secondary" >
  No
</button>
</ng-template>
<ng-template #popTitle>Fancy <b>content!!</b></ng-template>
</div>

<button placement="top" [popoverTitle]="popTitle" #popover="ngbPopover"  [ngbPopover]="popContent"  triggers="manual" (click)="openPop(popover)">click me </button>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM