Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度2-从DOM元素调用函数';s指令_Javascript_Html_Angular - Fatal编程技术网

Javascript 角度2-从DOM元素调用函数';s指令

Javascript 角度2-从DOM元素调用函数';s指令,javascript,html,angular,Javascript,Html,Angular,我有一些用指令动态创建的元素。在某些情况下,我必须从元素的指令调用函数。如果我是静态创建这些元素的,我会在组件中使用@ViewChild('myElement')myElement,类似于: <div #myelement myDirective>...</div> 。。。 在HTML中。然而,我无法做到这一点,因为我是动态创建这个元素的(我不知道这样的方法来动态地给出\myelement1,\myelement2,…标记)。我的想法是使用document.getEl

我有一些用指令动态创建的元素。在某些情况下,我必须从元素的指令调用函数。如果我是静态创建这些元素的,我会在组件中使用
@ViewChild('myElement')myElement
,类似于:

<div #myelement myDirective>...</div>
。。。
在HTML中。然而,我无法做到这一点,因为我是动态创建这个元素的(我不知道这样的方法来动态地给出
\myelement1
\myelement2
,…标记)。我的想法是使用
document.getElementById()
获取元素,但我无法从本机DOM元素访问该指令


您知道如何在不使用
@VievChild()
的情况下访问这些元素的指令吗?

您可以这样做:

html:


ts:

从'@angular/core'导入{指令,输入};
@指示({
选择器:“[mask]”
})
导出类掩码{
@Input()掩码:字符串;
恩戈尼尼特(){
console.log(this.mask);
}
getMask(){
归还这个面具;
}
}
从'@angular/core'导入{Component,ViewChildren,QueryList};
//...
导出类AppComponent{
公共用户;
@ViewChildren(掩码)掩码:QueryList;
构造函数(){}
ngAfterViewInit(){
this.masks.forEach((mask)=>{
log(mask.getMask());
})
//对此不确定
this.masks.changes.subscribe((mask)=>{
log(mask.getMask());
})
}
}

您试图通过访问元素的指令来实现什么?我应该从该指令调用一个函数。它有一个我无法从外部改变的内在逻辑。这是有道理的,但是
@ViewChildren(Mask)masks:QueryList获取所有
掩码
s?此.masks.changes
未定义,并且
masks
仅选择一个指令,而不是全部指令。
<div mask="mask1"></div>
<div mask="mask2"></div> 
import { Directive, Input} from '@angular/core';

@Directive({
  selector: '[mask]' 
})
export class Mask {
  @Input() mask: string;

  ngOnInit(){
    console.log(this.mask);
  }

  getMask(){
    return this.mask;
  }
}

import { Component, ViewChildren,QueryList } from '@angular/core';
//...
export class AppComponent {
  public user;

  @ViewChildren(Mask) masks: QueryList<Mask>;
  constructor( ){}

 ngAfterViewInit(){

    this.masks.forEach((mask)=>{
       console.log(mask.getMask());
    })
   // not sure of this
   this.masks.changes.subscribe((mask)=>{
       console.log(mask.getMask());
    })
 }

}