Moh*_*een 6 twitter-bootstrap angular2-directives angular
由于角度2没有配备完整的丰富组件,我决定在角度2内使用自举.我知道这不是最好的主意,因为它打破了虚拟圆顶问题,但我没有其他解决方案.我遇到的问题是角度2组件不会在popover html中呈现.有人有解决方案吗?
我正在看Renderer类,它似乎是我的解决方案,但我无法让它工作.这是一些代码:
我的父组件持有popover
ngAfterViewInit() {
// viewChild is updated after the view has been initialized
var elements = jQuery(this.elementRef.nativeElement).find('[data-toggle="popover"]');
jQuery.each(elements, jQuery.proxy(function(index, element){
var eventId = jQuery(element).prop('id');
jQuery(element).popover({ html : true,
placement: 'top',
container: 'body',
content: this.getEventContent(eventId) });
}, this));
}
getEventContent(eventId){
var selectedEvent = this.getEvent(eventId);
var button = jQuery('<button type="button" class="btn register"></button>');
var angularViewHolder= jQuery('<div></div>');
this.renderer.createElement(angularViewHolder[0], 'event-view')
button.attr('id', eventId);
return selectedEvent.description + '<br />' +
button[0].outerHTML + angularViewHolder[0].outerHTML;
}
Run Code Online (Sandbox Code Playgroud)我需要在popover中呈现的事件视图组件
import {Component, View} from 'angular2/core';
@Component({
selector: 'event-view',
template: '<div>Application details for application id: <h1>{{id}}</h1> will be loaded here!</div>',
inputs: ['id']
})
export class EventView {
id: string;
constructor() {
}
}
Run Code Online (Sandbox Code Playgroud)
我认为我的解决方案将在Renderer.renderComponent,但我不知道如何使用它.
你可以简单地
像这样初始化一个普通的引导弹出窗口
let popOver = $('[rel="popover"]');
popOver.popover({
container: 'body',
html: true,
content: function () {
return $('#myContent').removeClass('hide');
}
}).click(function(e) {
e.preventDefault();
});
popOver.on('show.bs.popover', (event) => {
this.popover_initialized = true;
});
popOver.on('hide.bs.popover', (event) => {
$(".popover[role=tooltip]").addClass('hide');
event.preventDefault();
event.stopImmediatePropagation();
});
Run Code Online (Sandbox Code Playgroud)
然后您只需定义一个要在激活弹出窗口的元素上调用的函数
showToolTip(){
if(!this.popover_initialized){
return;
}
$(".popover[role=tooltip]").removeClass('hide');
}
Run Code Online (Sandbox Code Playgroud)
因此,第一次 bootstrap 初始化一个普通的弹出窗口,但我们防止在隐藏时默认销毁 html 内容,然后您只需向其中添加一个“隐藏”类,然后当您想再次激活它时,只需删除它即可该类,适用于角度指令、绑定等