Angular2 中的基础 6 粘性元素
Foundation 6 Sticky element in Angular2
这个问题建立在我之前的一个问题之上:ngOnDestroy and $('#element').foundation('destroy');我基本上是在尝试让 Foundations Sticky 在我的 Angular2 应用程序中工作。除了无法使用 ngOnDestroy()
破坏 Foundation 元素的问题外,我一般都在与 Sticky 元素作斗争。我有的是:
Component Template
<div id="wrapperDiv">
<div class="columns medium-2 no-pad-left" data-sticky-container>
<div id="myStickyElement" class="sticky" data-sticky data-top-anchor="wrapperDiv">
<aside>
<ul class="menu vertical">
<li><a href="#elm1">Elm1</a></li>
<li><a href="#eml2">Eml2</a></li>
<li><a href="#eml3">Eml3</a></li>
<li><a href="#eml4">Eml4</a></li>
</ul>
</aside>
</div>
</div>
</div>
可能重要的是 wrapperDiv
是直接加载的,在其父项中没有 ngIf
条件。
在我的组件中,我在 ngAfterViewInit
:
中使用了它
Component
ngAfterViewInit(): void {
$('#myStickyElement').foundation();
}
当我在这个特定视图上执行 整页重新加载 时,一切都超级好用!如果我导航到这个视图,它不起作用。似乎与整页重新加载
有关
在某些时候,我是这样创建 Sticky 元素的:
let myStickyElement = new Foundation.Sticky($('#myStickyElement'));
这对行为没有任何影响,但我可以打印出对象 myStickyElement
。
在整页重新加载时,对象如下所示:
如果我导航到页面:
如您所见,myStickyElement
的对象看起来很不一样。缺了点什么。有没有人遇到过这个问题?为什么整页重新加载如此不同?
使用这个:
ngAfterViewInit(): void {
$('#myStickyElement').foundation();
}
是正确的举动,但是,由于某种原因,粘性插件无法正常工作。该插件附加了一个数据对象 zfPlugin
,它有一个 api 以启用 'stickyness'
这是您的操作方法:
ngAfterViewInit(): void {
$('#myStickyElement').foundation();
$('#myStickyElement').data("zfPlugin")._setSticky();
}
我在这里设置了一个 plnkr 来显示这个工作:https://plnkr.co/edit/zPuXooHYsJHuOQUj6Rdd?p=preview
更新 1
在这里查看基础代码后:https://github.com/zurb/foundation-sites/blob/develop/js/foundation.sticky.js 具体来说这个块:
$(window).one('load.zf.sticky', function(){
...
}
粘性插件正在等待事件 load.zf.sticky
被触发,它发生在静态页面中,因为基础知道这些元素在页面上。由于它在 angular 组件中,因此您必须自己触发该事件。
我在这里更新了 plunkr:https://plnkr.co/edit/1P6oU5ZrdKHGlMeHYUUw?p=preview
以下是我所做的更新:
ngAfterViewInit(): void {
$('#myStickyElement').foundation();
$(window).trigger('load.zf.sticky');
}
注意:在html中我添加了data-sticky-on="small"
这个问题建立在我之前的一个问题之上:ngOnDestroy and $('#element').foundation('destroy');我基本上是在尝试让 Foundations Sticky 在我的 Angular2 应用程序中工作。除了无法使用 ngOnDestroy()
破坏 Foundation 元素的问题外,我一般都在与 Sticky 元素作斗争。我有的是:
Component Template
<div id="wrapperDiv">
<div class="columns medium-2 no-pad-left" data-sticky-container>
<div id="myStickyElement" class="sticky" data-sticky data-top-anchor="wrapperDiv">
<aside>
<ul class="menu vertical">
<li><a href="#elm1">Elm1</a></li>
<li><a href="#eml2">Eml2</a></li>
<li><a href="#eml3">Eml3</a></li>
<li><a href="#eml4">Eml4</a></li>
</ul>
</aside>
</div>
</div>
</div>
可能重要的是 wrapperDiv
是直接加载的,在其父项中没有 ngIf
条件。
在我的组件中,我在 ngAfterViewInit
:
Component
ngAfterViewInit(): void {
$('#myStickyElement').foundation();
}
当我在这个特定视图上执行 整页重新加载 时,一切都超级好用!如果我导航到这个视图,它不起作用。似乎与整页重新加载
有关在某些时候,我是这样创建 Sticky 元素的:
let myStickyElement = new Foundation.Sticky($('#myStickyElement'));
这对行为没有任何影响,但我可以打印出对象 myStickyElement
。
在整页重新加载时,对象如下所示:
如果我导航到页面:
如您所见,myStickyElement
的对象看起来很不一样。缺了点什么。有没有人遇到过这个问题?为什么整页重新加载如此不同?
使用这个:
ngAfterViewInit(): void {
$('#myStickyElement').foundation();
}
是正确的举动,但是,由于某种原因,粘性插件无法正常工作。该插件附加了一个数据对象 zfPlugin
,它有一个 api 以启用 'stickyness'
这是您的操作方法:
ngAfterViewInit(): void {
$('#myStickyElement').foundation();
$('#myStickyElement').data("zfPlugin")._setSticky();
}
我在这里设置了一个 plnkr 来显示这个工作:https://plnkr.co/edit/zPuXooHYsJHuOQUj6Rdd?p=preview
更新 1
在这里查看基础代码后:https://github.com/zurb/foundation-sites/blob/develop/js/foundation.sticky.js 具体来说这个块:
$(window).one('load.zf.sticky', function(){
...
}
粘性插件正在等待事件 load.zf.sticky
被触发,它发生在静态页面中,因为基础知道这些元素在页面上。由于它在 angular 组件中,因此您必须自己触发该事件。
我在这里更新了 plunkr:https://plnkr.co/edit/1P6oU5ZrdKHGlMeHYUUw?p=preview
以下是我所做的更新:
ngAfterViewInit(): void {
$('#myStickyElement').foundation();
$(window).trigger('load.zf.sticky');
}
注意:在html中我添加了data-sticky-on="small"