html - 如何将点击事件分配给指令外的元素?

标签 html css angular typescript angular-directive

我目前有一个自定义指令,如果文本超过 3 行,它会截断文本。现在,如果您直接单击文本本身,它就可以工作,但我想将单击事件分配给一个按钮。这是我当前的代码:

@Directive({
  selector: '[appReadMore]'
})
export class ReadMoreDirective {

  constructor() { }

  @HostBinding('class.truncate-text') get opened() {
    return this.isClosed;
  }
  @HostListener('click') open() {
    this.isClosed = (this.isClosed === true ? false : true);
  }

  private isClosed = true;

}

在我的 html 文件中我有:

<div class="container" *ngFor="let book of books">
  <div>
    <p appReadMore>
      {{Text 1}}
    </p>
    <p appReadMore>
      {{Text 2}}
    </p>
  </div>
  <div>
    <button appReadMoreTrigger>Read more</button>
  </div>
</div>

和我的CSS:

.truncate-text {
   overflow: hidden;
   display: -webkit-box;
   -webkit-line-clamp: 3;
   -webkit-box-orient: vertical;
}

当我点击每个人时 <p>内容truncate-text每隔一次点击就会应用和删除类,但我希望 <p> 都发生这种情况当我点击“阅读更多”按钮时标记。

我尝试创建一个按钮指令以将 ReadMoreDirective isClosed 值设置为 true/false,但它似乎无法正常工作(可能是因为它不在 ReadMoreDirective 的范围内?):

@Directive({
  selector: '[appReadMoreTrigger]',
})
export class ReadMoreTriggerDirective{

  constructor(private readMore:ReadMoreDirective) {}

  @HostListener('click') open() { 
    this.readMore.open();
  }
}

当我尝试这样做时,它会抛出一条错误消息“No provider for appReadMoreDirective”,而当我将其放入提供者列表时,它似乎创建了一个新的 ReadMoreDirective 实例。

谢谢

最佳答案

在按钮点击事件上尝试这样的事情:

document.querySelectorAll('[appReadMore]').classList.toggle('truncate-text')

关于html - 如何将点击事件分配给指令外的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41452208/

相关文章:

visual-studio - 更新 Angular2 项目中的 Typescript

html - 导致奇怪的 anchor 行为的阿拉伯文本

html - 自动换行 : break-word not working in <small> or any other element

javascript - 如何在带有静态内容的 asp.net 中添加背景图片幻灯片?

javascript - LESS 1.3.3,观看模式在 espresso 编辑器中占用大量 CPU

javascript - '{}' 类型的参数不可分配给 Angular 8 中类型的参数

javascript - 内容未显示: Angular 2

javascript - 尝试根据 &lt;input&gt; 按钮动态替换 url 和选项值

html - 如何使用 css 从中心而不是顶部/底部/侧面对齐任意大小的图像

html - 什么是可破坏的非空白字符