获取对组件中使用的指令的引用

2023-12-28

我有一个组件,其模板如下所示:

<div [my-custom-directive]>Some content here</div>

我需要访问MyCustomDirective这里使用的类实例。当我想访问子组件时,我使用ViewChild query.

是否有等效的功能来访问子指令?


您可以使用exportAs的财产@Directive注解。它导出要在父视图中使用的指令。从父视图中,您可以将其绑定到视图变量并使用以下命令从父类访问它@ViewChild().

示例与plunker http://plnkr.co/edit/pftUzfHKJL6yhdexKE98?p=preview:

@Directive({
  selector:'[my-custom-directive]',
  exportAs:'customdirective'   //the name of the variable to access the directive
})
class MyCustomDirective{
  logSomething(text){
    console.log('from custom directive:', text);
  }
}

@Component({
    selector: 'my-app',
    directives:[MyCustomDirective],
    template: `
    <h1>My First Angular 2 App</h1>

    <div #cdire=customdirective my-custom-directive>Some content here</div>
    `
})
export class AppComponent{
  @ViewChild('cdire') element;

  ngAfterViewInit(){
    this.element.logSomething('text from AppComponent');
  }
}

Update

正如评论中提到的,上述方法还有另一种替代方法。

而不是使用exportAs, 可以直接使用@ViewChild(MyCustomDirective) or @ViewChildren(MyCustomDirective)

下面是一些代码来演示这三种方法之间的区别:

@Component({
    selector: 'my-app',
    directives:[MyCustomDirective],
    template: `
    <h1>My First Angular 2 App</h1>

    <div my-custom-directive>First</div>
    <div #cdire=customdirective my-custom-directive>Second</div>
    <div my-custom-directive>Third</div>
    `
})
export class AppComponent{
  @ViewChild('cdire') secondMyCustomDirective; // Second
  @ViewChildren(MyCustomDirective) allMyCustomDirectives; //['First','Second','Third']
  @ViewChild(MyCustomDirective) firstMyCustomDirective; // First

}

Update

另一个有更多说明的笨蛋 http://plnkr.co/edit/kkz6Q919WBQe3h35Pl3L?p=preview

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取对组件中使用的指令的引用 的相关文章

随机推荐

  • 无法使用 Ghost4J 加载库“gs”

    我正在尝试使用 Ghost4J 将 PDF 转换为 PNG 我知道人们以前曾问过这个问题 但在 OS X 10 和最新版本的 Ghost4J 中却没有 我已按照 zippy1978 的答案中列出的说明进行操作 使用 Java 将 PDF 转
  • WM_TOUCH 不会立即随触摸事件一起发送

    我正在使用触摸屏并使用 Windows 7 内置驱动程序 因为它从未提示我安装任何驱动程序 除了一个小问题外 它工作正常 当我触摸屏幕时 它不会发送 WM LBUTTONDOWN 直到我将手指移离屏幕 这样做似乎是为了确定我是否打算按住模拟
  • setlocale() 无法在 MacOS 上使用 MAMP 在本地主机上工作

    简而言之我的问题 我正在使用setlocale LC TIME de DE 为了用德语显示日期 时间的 口头 部分 即月份 工作日 这适用于任何公共服务器 但是doesn t在我的本地主机上 使用 MAMP 它以英语而不是德语显示它 详细地
  • 为 Mac App Store 创建基于 HTML5 的应用程序

    Mac 版的新 Tweetdeck 据说是基于 HTML5 的 http www cultofmac com 134237 tweetdeck releases html5 based app in the mac app store ht
  • Networked-aframe 为新用户分配不同的位置

    我在使用 networked aframe 设置的多人 A Frame 环境中遇到问题 我希望连接的前三个用户有不同的生成位置 并且任何其他用户在第三个位置生成 但我无法让它工作 这是我到目前为止在 Html 中所拥有的内容
  • 以“更快”的方式隐藏信息?

    我有一个关于面向对象设计原则和 Swift 的问题 我对 Java 非常熟悉 目前正在学习 udacity 课程 以便初步掌握 Swift 在 Java 社区 基本上在每个遵循 OOP 的社区 中 使用信息隐藏技术 例如将数据隐藏或封装在类
  • Bootstrap 词缀重置不起作用

    我正在尝试在引导程序中实现一个词缀 这应该不是问题 但我想让它响应 当页面调整大小时 某些元素将隐藏在页面顶部 并且由于宽度的变化 我需要重置词缀并设置到新位置 我刚刚搜索了一下 发现了一个接受的解决方案 https stackoverfl
  • 简单的 HTML 电子邮件:基本 CSS 样式被剥离

    我正在通过 python 脚本从 Linux 机器上的命令行发送一封简单的电子邮件 我查找了有关为什么 CSS 在电子邮件客户端中可能会被更改 删除等的答案 但是 我似乎无法解决在我看来简单的问题 当我发送带有表格的简单 HTML 电子邮件
  • 经典 ASP 应用程序 CINT 失败 - twitpocalypse v2

    由于数量值超过了 VBScript INT 可以存储的数量 我收到了一条非常讨厌的错误消息 实际上是用户 这完全是一个情况推特末日 http www twitpocalypse com 由于 CINT 在这种情况下不起作用 最好的解决方法是
  • 在 Weblogic 10.3 中调用 EJB 时出现 NameNotFoundException

    我有一个 EJB 定义如下 package com foo Stateless mappedName HelloWorld public class HelloWorldBean implements HelloWorld HelloWor
  • 指向结构数组的指针并获取内存

    A link是一个指向节点的指针 typedef struct node link 在 main 中 我有以下代码 config gt m 只是一些整数 array of pointers to structs link heads con
  • 在 SSIS 中使用小数字段

    我正在使用 SQL Server 2008 w SP2 我有一个传入的小数 9 2 字段通过我的传入OLE DB 转换 to my 记录集目标转换 我发现 当我单击目标转换的 输入和输出 属性选项卡时 由于某种原因 它将此特定字段显示为 D
  • kubernetes 与 openshift(路由和服务)

    我是 kubernetes 和 openshift 的新手 来自 docker swarm world 并且我在使用一些 kubernetes 和 openshift 文档时遇到了问题 特别是与route and services 我一直在
  • org.openqa.selenium.chrome.ChromeDriver 类型不可访问

    对于我在 Selenium 中使用的几乎所有类 我收到类似 无法访问类型 org openqa selenium chrome ChromeDriver 的错误 在我使用 Java 8 之前它工作得很好 但是当我升级到 Java 10 时
  • Highstocks - 在日期时间轴上使用“之间”的tickmarkPlacement(无类别)

    是否有任何解决方法可以将 tickMarkPlacement 设置为日期时间轴上的 之间 我知道是API 不支持 http api highcharts com highcharts xAxis tickmarkPlacement但我希望找
  • 使用 Realm 尝试删除一个对象会引发异常(“只能在写入事务中将对象添加到 Realm...”)

    我正在尝试删除领域中的 1 个对象 但无法执行此方法 有什么不对 var realm RLMRealm defaultRealm realm beginWriteTransaction var soo Sample3 soo sampleK
  • 通过光标在列表视图中显示数据

    我编写了一个程序 可以通过光标在列表视图中显示存储在数据库中的数据 但在运行时它给我强制关闭 我读了 logcat 但我不明白这个错误是什么 我给出了我的代码和 logcat 请帮助我 当前购物车代码 public class curren
  • MySQL If 语句问题

    我正在尝试做这个IF声明有效 但我似乎无法让它执行我想要的操作 如果我做一个选择 result 它会给我价值0 那么为什么不IF声明工作 SET message sometihng here select LEFT message 1 in
  • git 错误:RPC 失败,curl 56 GnuTLS 接收错误(-110)

    运行时出现这个错误如何解决git clone在 Linux git 存储库上 错误 RPC 失败 curl 56 GnuTLS 接收错误 110 TLS 连接未正确终止 root git clone https git kernel org
  • 获取对组件中使用的指令的引用

    我有一个组件 其模板如下所示 div Some content here div 我需要访问MyCustomDirective这里使用的类实例 当我想访问子组件时 我使用ViewChild query 是否有等效的功能来访问子指令 您可以使