角度指令输入未设置

时间:2018-12-04 17:58:00

标签: angular typescript angularjs-directive

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

指令:

@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

我也不确定如何在div中加载外部模板文件。谢谢。

编辑

根据建议,执行以下操作将打印出两个输入,我将坚持第二个输入。 @ nkuma_12的答案说明了如何在组件的类中查找grid属性,这很有意义-最终将有一个按钮可以更改布局变量。

<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 个答案:

答案 0 :(得分:1)

因为您正在使用

  @Input('layout') layout: string;

在指令中。

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

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

您的数据输入值也应用双引号引起来:[data]="employees"。请查看文档以获取更多详细信息。