我无法让 BookBlock 插件在 Angular 中工作。看来 BookBlock 对象是在函数“ngAfterViewInit”中创建的太早了,DOM 还没有准备好使用。
这是组件代码:
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { Skill } from './skill';
import { SkillService } from './skill.service';
declare var BookBlock: any;
@Component({
moduleId: module.id,
selector: 'skill-list',
templateUrl: './template/skill-list.component.html',
styles: ['.skills {list-style-type: none;}', '*.skills li {padding:
4px;cursor: pointer;}']
})
export class SkillListComponent implements OnInit {
skills: Observable<Skill[]>;
bbArea: HTMLElement;
bookBlock: any;
constructor(private skillService: SkillService) {}
ngOnInit() {
this.skills = this.skillService.getSkills();
}
ngAfterViewInit() {
this.bbArea = document.getElementById("blockbook");
this.bookBlock = new BookBlock(this.bbArea, {
speed: 500,
shadowSides: 0.8,
shadowFlip: 0.7
});
}
}
这是视图:
<article>
<h4>My Skills</h4>
<div class="bb-custom-wrapper">
<div id="blockbook" class="bb-bookblock" >
<div *ngFor="let skill of skills | async" class="bb-item">
<a href="" [routerLink]="['/skills', skill.id]">
{{skill.id}}. {{skill.name}}
</a>
</div>
</div>
</div>
</article>
这是错误:
core.umd.js:1091 ERROR Error: Uncaught (in promise): TypeError: Cannot read
property 'style' of undefined
TypeError: Cannot read property 'style' of undefined
at BookBlock._init (bookblock.js:111)
at new BookBlock (bookblock.js:47)
at SkillListComponent.ngAfterViewInit (skill-list.component.ts:26)
实际的错误行是这样的:
...
// previous item´s index
this.previous = -1;
// show first item
this.current = this.items[this.currentIdx];
***this.current.style.display = 'block';***
// get width of this.el
// this will be necessary to create the flipping layout
this.elWidth = this.el.offsetWidth;
var transEndEventNames = {
'WebkitTransition': 'webkitTransitionEnd',
'MozTransition': 'transitionend',
...
如果您需要更多信息,请告诉我。谢谢!