【问题标题】:How to create a custom directive in angular如何在 Angular 中创建自定义指令
【发布时间】:2020-01-06 19:47:34
【问题描述】:

我一直在用 Angular 编写一个应用程序,并且我已经很好地掌握了大多数东西。 我不明白的一件事是结构指令或任何使用代码的东西都会改变 DOM

对于我想要学习的最简单的例子,如果我有的话,在父模板中

<div [addTitle]='sometitle'>
   <child-component></child-component>
</div>

我想构建一个指令,当我添加一个具有 [addTitle]='sometitle' 属性的 div 时,它会将最终代码更改为此

<div [addTitle]='sometitle'>
   <h2>sometitle</h2>
   <child-component></child-component>
</div>

同时保持&lt;child-component&gt;&lt;/child-component&gt; 的内容不变,并且所有绑定都保持不变等。

我知道我需要一个文件,例如

import { Directive, Input } from '@angular/core';

@Directive({
  selector: '[addTitle]'
})
export class addTitleDirective {
  constructor() { }
}

我只是不知道如何访问带有指令的标签的内部“html”或防止子组件被破坏或如何将&lt;h2&gt;sometitle&lt;/h2&gt; 添加到 DOM 或显示 html在&lt;child-component&gt; 里面返回DOM

如果这是一般情况,我很抱歉,但我正在寻找一些指导来帮助我开始。

编辑 inorganik 好心地指出了一个组件更适合并给出了示例..谢谢。

我想知道我有没有

<div [addTitles]="['sometitle1', 'sometitle2']">
   <child-component1></child-component1>
   <child-component2></child-component2>
</div>

并想以

告终
<div [addTitle]="['sometitle1', 'sometitle2']">

   <h2>sometitle1</h2>
   <child-component1></child-component1>

   <h2>sometitle2</h2>
   <child-component2></child-component2>

</div>

组件还能工作吗?

【问题讨论】:

    标签: angular


    【解决方案1】:

    我相信您正在寻找ng-content。另外我认为组件比指令更好地服务您的示例 - 所以您的组件可能如下所示:

    @Component({
      selector: 'app-title',
      templateUrl: './title.component.html',
      styleUrls: ['./title.component.scss'],
    })
    export class TitleComponent {
    
      @Input() addTitle: string;
    
    }
    

    模板:

    <h2>{{ addTitle }}</h2>
    <ng-content></ng-content>
    

    然后你这样使用它:

    <app-title [addTitle]="'my title'">
      <child-component></childcomponent>
    </app-title>
    

    【讨论】:

    • 我还要提一下,我们可以使用属性选择器[addTitle] 作为组件,只是为了不引入新元素
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2019-02-06
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    相关资源
    最近更新 更多