Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 获取角度指令实例,即使它´;没有渲染_Angular_Angular Directive_Angular Components - Fatal编程技术网

Angular 获取角度指令实例,即使它´;没有渲染

Angular 获取角度指令实例,即使它´;没有渲染,angular,angular-directive,angular-components,Angular,Angular Directive,Angular Components,我试图得到一个角度指令实例,即使它还没有被渲染 例如,我得到了一个应用程序组件和baz指令。我希望获得指令实例,即使它没有显示/呈现到dom。当然,我可以通过输入变量控制功能,但在我的情况下,访问实例并调用一些函数会更好/更容易。因此,它的行为应该类似于NgIf*,不仅通过输入变量,而且通过实例函数调用 因此,我的问题是,即使没有渲染,我如何获取实例,或者是否有其他/更好的方法来处理这种情况 import {Component, Directive, OnInit, TemplateRef, V

我试图得到一个角度指令实例,即使它还没有被渲染

例如,我得到了一个应用程序组件和baz指令。我希望获得指令实例,即使它没有显示/呈现到dom。当然,我可以通过输入变量控制功能,但在我的情况下,访问实例并调用一些函数会更好/更容易。因此,它的行为应该类似于NgIf*,不仅通过输入变量,而且通过实例函数调用

因此,我的问题是,即使没有渲染,我如何获取实例,或者是否有其他/更好的方法来处理这种情况

import {Component, Directive, OnInit, TemplateRef, ViewChild, ViewContainerRef} from "@angular/core";

@Directive({selector: '[baz]'})
export class BazDirective
{
    constructor(protected view: ViewContainerRef, protected template: TemplateRef<any>)
    {
    }

    renderNow()
    {
        this.view.createEmbeddedView(this.template);
    }
}

@Component({
    selector: "app-root", templateUrl: "./app.component.html"
})
export class AppComponent implements OnInit
{
    @ViewChild(BazDirective) bar: BazDirective


    constructor()
    {
    }

    ngOnInit(): void
    {
        this.bar.renderNow();
    }
}
从“@angular/core”导入{Component,Directive,OnInit,TemplateRef,ViewChild,ViewContainerRef};
@指令({选择器:'[baz]'})
出口类指令
{
构造函数(受保护的视图:ViewContainerRef,受保护的模板:TemplateRef)
{
}
renderNow()
{
this.view.createEmbeddedView(this.template);
}
}
@组成部分({
选择器:“应用程序根目录”,模板URL:“./app.component.html”
})
导出类AppComponent实现OnInit
{
@ViewChild(BazDirective)栏:BazDirective
构造函数()
{
}
ngOnInit():void
{
this.bar.renderNow();
}
}

foo

是的,这是可能的,这取决于您所说的不渲染是什么意思。因为不可见并不意味着它不被渲染

有了结构指令,就像在您的示例中一样,您可以访问您的指令。下面是一个实例:。 如果您的指令真的没有呈现(例如用*ngIf包装),则情况并非如此

在您的示例中,您不应该在html元素上使用模板变量
#bar
,因为您使用@ViewChild()来定位BazDirective


希望有帮助

是的,这是可能的,这取决于您所说的不渲染是什么意思。因为不可见并不意味着它不被渲染

有了结构指令,就像在您的示例中一样,您可以访问您的指令。下面是一个实例:。 如果您的指令真的没有呈现(例如用*ngIf包装),则情况并非如此

在您的示例中,您不应该在html元素上使用模板变量
#bar
,因为您使用@ViewChild()来定位BazDirective


希望有帮助

Not displayed=不可访问。这就是问题所在,因为指令存在,否则它无法对输入变量的更改做出反应。组件存在,指令不存在。它已从dom中删除,您无法访问它。Not display=Not accessible。这就是问题所在,因为该指令存在,否则它无法对输入变量的更改做出反应。该组件存在,该指令不存在。它已从dom中删除,您无法访问它。我的错误。在区分您和我的版本时,我注意到我的版本不起作用,因为我没有在模块声明中包含该指令。这是一个愚蠢的错误,没有特殊的角度行为。谢谢是的#bar var是一些测试的遗留物。没问题!很好,你解决了你的问题!我的错误。在区分您和我的版本时,我注意到我的版本不起作用,因为我没有在模块声明中包含该指令。这是一个愚蠢的错误,没有特殊的角度行为。谢谢是的#bar var是一些测试的遗留物。没问题!很好,你解决了你的问题!