我想在 Angular 2 应用程序中使用 Masonry Grid。
我安装了这个: http: //masonry.desandro.com/
和:npm install masonry-layout --save
我包括通过angular-cli.json
"scripts": [
"../node_modules/masonry-layout/dist/masonry.pkgd.min.js"
],
这也有效。
在应用程序中,如果我在 Web 浏览器中打开控制台并输入这段代码:
var elem = document.querySelector('#masonry-grid');
var msnry = new Masonry( elem, {
// options
itemSelector: '.grid-item',
columnWidth: 200
});
一切正常。
现在我想实现它自动工作。那我做了什么?
在我正在使用的组件中
ViewChild
( @ViewChild('masonryGrid') masonryGrid: ElementRef;
)
获取 div 并替换这行纯 javascript 行
var elem = document.querySelector('#masonry-grid');
现在我正在努力为 Masonry 创建typings.d.ts,而这部分对我来说还不是很清楚。
我尝试在组件顶部以这种方式声明变量。
declare var Masonry: any;
然后在 ngAfterViewInit() 中执行此操作
new Masonry(this.masonryGrid.nativeElement, {
// options
itemSelector: '.grid-item',
columnWidth: 200
});
一切都已编译,我在控制台中看不到任何错误,但 Masonry 没有实例化并且它不起作用。
任何形式的帮助将不胜感激。
编辑:
它开始起作用了。看来angular-cli webpack有问题。有时它不会自动识别更改。它在控制台中说“没有改变”。我重新启动服务器,它开始工作。