javascript - ngFor 之后的 Angular 2 火灾事件

标签 javascript jquery typescript angular ngfor

我正在尝试使用一个 jQuery 插件来替换 Angular 2 中某些动态元素内的默认滚动条。

这些元素是使用 ngFor 循环创建的,也就是说,我无法将 jQuery 事件附加到这些创建的元素上。

应用程序在某个时候改变了一个 Observable 对象,该对象在 ngFor 中循环以呈现 View 。

现在,我想知道 Angular 何时完成绘制我的元素,以便我可以运行 jQuery 插件。

  • 我不想在 HTML 模板中包含任何 javascript。
  • 我不想使用 ngAfterViewInit,因为这个钩子(Hook)被触发了太多次
  • 我不想实现基于 setTimeout 的解决方案(我认为它不可靠)

我通过使用以下自定义 Pipe 找到了解决方案:在模板中的 ngFor 循环结束时,我写:

{{i | FireStoreEventPipe:'EVENT_TO_BE_FIRED'}}

FireStoreEventPipe 是这样的:

transform(obj: any, args:any[]) {
    var event = args[0];
    //Fire event
    return null;
}

但这个方案并不令我满意。

有什么更好的建议吗?

谢谢

最佳答案

我遇到了类似的问题。 我正在使用 angular2 rc 1。

我通过创建一个新组件解决了这个问题(指令对我不起作用)。

import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
   selector: 'islast',
   template: '<span></span>'
})
export class LastDirective {
   @Input() isLast: boolean;
   @Output() onLastDone: EventEmitter<boolean> = new EventEmitter<boolean>();
   ngOnInit() {
      if (this.isLast)
        this.onLastDone.emit(true);
   }
}

然后我在指令中将我想要的组件作为子组件导入:

directives: [LastDirective],

在 html 中:

<tr *ngFor="let sm of filteredMembers; let last = last; let i=index;" data-id="{{sm.Id}}">
     <td>
        <islast [isLast]="last" (onLastDone)="modalMembersDone()"></islast>
     </td>
 </tr>

当然还有实现 modalMembersDone()

关于javascript - ngFor 之后的 Angular 2 火灾事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36482343/

相关文章:

javascript - chop 字符串 JavaScript

javascript - 单击不同按钮时如何分离函数执行

jquery - Bootstrap popover 位置和位置以及提示

javascript - AJAX 和 php 脚本后添加的表单元素未传输到 $_POST

reactjs - 错误: Final loader didn't return a Buffer or String

javascript - 将对象内的相同 id 连接到一个对象数组

javascript - 你能在 JavaScript 字符串插值中执行三元表达式吗?

angular - 可重复使用的组件值转入第 2 页/任何其他页面

typescript - ts-jest 不识别 es6 导入

javascript - 使用 Crypto Node.js 获取错误 "data too large for key size"