And*_*nti 5 javascript jquery typescript ngfor angular
我正在尝试使用jQuery插件替换Angular 2中某些动态元素中的默认滚动条.
这些元素是使用ngFor循环创建的,也就是说我无法将jQuery事件附加到创建的元素上.
在某些时候,应用程序Observable会变换一个ngFor在其中循环的对象,以便呈现视图.
现在,我想知道Angular何时完成绘制我的元素,以便我可以运行jQuery插件.
ngAfterViewInit,因为这个钩子被激发了太多次我通过使用以下自定义找到了一个解决方案Pipe:在ngFor模板的循环结束时,我写道:
{{i | FireStoreEventPipe:'EVENT_TO_BE_FIRED'}}
Run Code Online (Sandbox Code Playgroud)
在哪里FireStoreEventPipe是这样的:
transform(obj: any, args:any[]) {
var event = args[0];
//Fire event
return null;
}
Run Code Online (Sandbox Code Playgroud)
但是这个解决方案并不能让我满意.
有什么更好的方法吗?
谢谢
我遇到了类似的问题.我正在使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在我想要的组件中导入为指令中的子组件:
directives: [LastDirective],
Run Code Online (Sandbox Code Playgroud)
在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>
Run Code Online (Sandbox Code Playgroud)
当然还有实现modalMembersDone()