zoukankan      html  css  js  c++  java
  • [Angular Directive] Implement Structural Directive Data Binding with Context in Angular

    Just like in *ngFor, you're able to pass in data into your own structural directives. This is done by declaring the variable using a let statement then passing context into the createEmbeddedView call.

    We know *ngFor we did like this:

    *ngFor="let message of messages"

    So how can we also do like this?

    Remember that 

    <h1 *three="let messages"> 
    
    <!-- Equal to --> 
    
    <template let-messages></template>
    import {Directive, Input, TemplateRef, ViewContainerRef} from "@angular/core";
    @Directive({
      selector: '[three]'
    })
    export class ThreeDirective {
      @Input() set three(value) {
        let num = 3;
    
        while (num--) {
          const message = {
            to: "People" + Math.random(),
            message: "Hello" + Math.random()
          };
          this.view.createEmbeddedView(this.template, {
            $implicit: message
          })
        }
      }
    
      constructor(private template: TemplateRef<any>, private view: ViewContainerRef) {
    
      }
    }

    There to avoid change detection problem (value changed after compoennt inited). We need to point out after 'three' as an input.

    <h2 *three="let message">{{message.to}} - {{message.message}}</h2>
  • 相关阅读:
    第五篇:常用模块
    第三篇:函数
    第七篇:面向对象高级
    第二篇:流程控制、数据类型、字符编码、文件处理
    第一篇:python入门
    Python-计算机硬件基础
    PYTHON-UDP
    PYTHON-TCP 粘包
    PYTHON-网络通信 TCP
    English Voice of <<Something just like this>>
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6290808.html
Copyright © 2011-2022 走看看