没有`*`的结构指令?

时间:2018-02-06 09:44:49

标签: javascript angular

我有一个简单的指令myNgIf,它是ngIf的基本简化:

import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
@Directive({
  selector: '[myNgIf]'
})
export class MyNgIfDirective {

  constructor(
    private templateRef: TemplateRef<any>,
    private viewContainer: ViewContainerRef) { }

  @Input() set myNgIf(condition: boolean) {
    if (condition) {
      this.viewContainer.createEmbeddedView(this.templateRef);
    } else {
      this.viewContainer.clear();
    }
  }

}

标记是:

111
 <div *myNgIf="true">
   hello
 </div>
222

这显然显示:

enter image description here

我已经知道这里发生了什么 - 该模板已经过去了:

<ng-template>
 <div...>
</ng-template>

然后将该模板注入ctor,我们稍后将其用于:

 this.viewContainer.createEmbeddedView(this.templateRef);
                                                   ^
 --------------------------------------------------|

但后来我想,如果我希望它的工作原理相同,但不使用*

<div myNgIf="true">
   hello
 </div>

我已经注入了ViewContainerRef所以我有一个&#34的锚点;在哪里注入&#34;

但是现在我没有&#34;注入什么&#34;

问题:

出于学习目的,如何引用myNgIf应用于的当前元素?

NB
我已经知道我将在开始时看到内容,因为div是一个浏览器已知的解析元素,而ng-template不是 - 但是再次 - 我要求学习目的。

STACKBLITZ

1 个答案:

答案 0 :(得分:1)

这是我的解决方案: https://stackblitz.com/edit/angular-fhhpek?file=app%2Fmy-ng-if.directive.ts

select percent_decimal, case when percent_decimal < 0 then 0 when percent_decimal > 1 then 1 else percent_decimal end as percent_modified from condition / PERCENT_DECIMAL PERCENT_MODIFIED --------------- ---------------- -0.01 0 .1 .1 1 1 1.1 1 用于直接访问DOM。 我用注释标记内容DOM节点,并在加载指令后立即将其分离。如果条件评估为真,则稍后重新附加。

免责声明:这真的很丑陋而且没有准备就绪; - )