代码之家  ›  专栏  ›  技术社区  ›  Dawit

未设置角度方向输入

  •  -1
  • Dawit  · 技术社区  · 6 年前

    我只是在这里找不到这个问题…

    指令:

    @Directive({
      selector: '[appListData]'
    })
    export class ListDataDirective implements OnInit {
    
      @Input('data') data: object;
      @Input('layout') layout: string;
    
      templateUrl: string;
    
      constructor(private el: ElementRef) { }
    
      ngOnInit(): void {
    
        console.log(JSON.stringify(this.data));
        console.log(this.layout);
    
        this.templateUrl = 'list-data-layouts/list.html';
    
        if (this.layout === 'grid') {
          this.templateUrl = 'list-data-layouts/grid.html';
        } else if (this.layout === 'list') {
          this.templateUrl = 'list-data-layouts/list.html';
        }
    
      }
    }
    

    模板

    <div appListData [data]=employees [layout]="grid"></div>
    

    日志输出:布局未定义-为什么?

    enter image description here

    我也不知道如何在我的分区中加载外部模板文件。谢谢。

    编辑

    根据建议,执行以下操作将打印出两个输入,我将继续进行第二个输入。@Nkuma_12 answer解释了它如何在组件类中查找网格属性,这是有意义的——因为最终会有一个按钮改变布局变量。

    <div appListData [data]=employees layout="grid"></div> 
    <div appListData [data]=employees [layout]="'grid'"></div>
    

    我一直在阅读关于结构指令的文档——没有什么帮助我。 https://angular.io/guide/structural-directives#write-a-structural-directive

    1 回复  |  直到 6 年前
        1
  •  1
  •   nircraft    6 年前

    因为你在使用

      @Input('layout') layout: string;
    

    在指令中。

    当传递输入时,我看到您正在传递 [layout]="grid"></div> 这使得它在使用它的组件中查找网格变量 undefined .

    您应该用单引号传递值网格: [layout]="'grid'"></div>

    此外,您的数据输入值应该用双引号括起来: [data]="employees" . 有关详细信息,请查看文档。