gpt4 book ai didi

javascript - Angular2 - 使用子组件作为属性的值

转载 作者:太空狗 更新时间:2023-10-29 19:36:11 25 4
gpt4 key购买 nike

我想在用户单击输入字段时显示一个弹出窗口,这工作正常,但我希望该弹出窗口的数据内容属性来自子组件的模板。这是一个例子:

parent.ts

import {Component,AfterViewInit} from 'angular2/core';
import {bootstrap} from 'angular2/platform/browser';
import {ChildComponent} from './child_test.ts';


@Component({
selector: 'app',
template: `<input type='text' data-toggle="popover" data-trigger="focus" data-placement="bottom" [attr.data-content]="getPopoverContent()" />`,
providers: [ChildComponent]
})
class AppComponent implements AfterViewInit{
constructor(private _child: ChildComponent) {}

getPopoverContent(){
return this._child; //returning empty object instead of child template
}
ngAfterViewInit(){
$("input").popover();
}

}

bootstrap(AppComponent);

child.ts

import {Component} from 'angular2/core';

@Component({
selector: "child-component",
template: "<div>Popover content from child.</div>"
})
export class ChildComponent{};

我应该使用 DynamicComponentLoader 而不是依赖注入(inject)吗?如果是这样,我该如何实现?

最佳答案

解决方法如下:

将临时变量分配给要显示的组件

<transaction-filter #popoverComponent></transaction-filter>

重要提示:上面的组件必须在其定义中公开一个 ElementRef

constructor(public el: ElementRef) {}

创建将显示弹出窗口的元素

<button class="btn-sm btn-link text-muted"
data-animation="true"
data-placement="bottom"
title="Create Rule"
[popover]="popoverComponent">

Create Rule...
</button>

现在 popover 指令本身:

/// <reference path="../../typings/tsd.d.ts"/>

import 'bootstrap'

import { Directive, ElementRef, Input} from 'angular2/core'

declare var $: JQueryStatic;

@Directive({
selector: '[popover]',
})
export class PopoverDirective {
@Input('popover') _component: any
_popover: JQuery

constructor(private _el: ElementRef) { }

ngOnInit() {
// Hide the component
this._component.el.nativeElement.style.display = "none"

// Attach it to the content option
this._popover = $(this._el.nativeElement)
.popover({
html: true,
content: this._component.el.nativeElement
})

// When the below event fires, the component will be made visible and will remain
this._popover.on('shown.bs.popover', () => {
this._component.el.nativeElement.style.display = "block"
})
}
}

关于javascript - Angular2 - 使用子组件作为属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35683442/

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