angularjs有一个仅适用于选择控制器的指令
我正在使用一个指令实现从angularjs有一个仅适用于选择控制器的指令,angularjs,Angularjs,我正在使用一个指令实现从a到div的页面滚动。这意味着通过点击a看起来像: <a data-scroll-on-click="" href="#projects">Projects</a> preventDefault停止路由器启动 带有点击数据滚动的属性的a是导航栏的一部分,我想通过ng include将其包含在其他页面上。但是,这意味着a元素将在滚动没有意义的页面上具有滚动单击属性。这意味着,当导航栏位于主页之外的其他页面上时,我希望其中的锚能够像链接一样返回主页,
a
到div
的页面滚动。这意味着通过点击a
看起来像:
<a data-scroll-on-click="" href="#projects">Projects</a>
preventDefault
停止路由器启动
带有点击数据滚动的属性的a
是导航栏的一部分,我想通过ng include
将其包含在其他页面上。但是,这意味着a
元素将在滚动没有意义的页面上具有滚动单击
属性。这意味着,当导航栏位于主页之外的其他页面上时,我希望其中的锚能够像链接一样返回主页,而不是触发滚动
我不确定什么是好的解决方案:我不确定是否有可能只有在存在某个活动控制器(一种条件属性)的情况下才会出现滚动单击
?或者如果可以在指令中指示当前活动控制器
最坏的情况是,我只写两个导航条-一个用于通过指令实现滚动的主页,另一个用于通过路由器实现链接的辅助页面,但我觉得有一种更简洁的方法可以做到这一点。我认为您可以在单击“真/假”时将布尔值与数据滚动一起传递给,并在指令中检查它是否为真,而不是继续滚动,否则忽略它
<a data-scroll-on-click="" href="#projects">Projects</a>
在您的代码中,将在第一次链接指令时计算所需的滚动\u
。这意味着,每当用户导航离开主页面(主页面中加载的给定页面)时,指令都是无用的-它已经用scroll\u needed=true
初始化。最好检查一下attrs.scrollOnClickinside click handler来检查应用程序的当前状态。我还没有尝试过,如果这样做了,你的建议很好,如果有一个可用的plinker或jsfiddle,你可以修改。如果答案正确,请投票,如果需要进一步修改,请修改它。
consortiumApp.directive('scrollOnClick', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var idToScroll = attrs.href;
element.on('click', function(event) {
event.preventDefault();
var $target;
if (idToScroll) {
$target = $(idToScroll);
} else {
$target = element;
}
$("body").animate({scrollTop: $target.offset().top}, 1500, 'easeInOut
});
}
}
});
<a data-scroll-on-click="" href="#projects">Projects</a>
consortiumApp.directive('scrollOnClick', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var idToScroll = attrs.href;
var scroll_needed = attrs.scrollOnClick;
if(scroll_needed === true){
element.on('click', function(event) {
event.preventDefault();
var $target;
if (idToScroll) {
$target = $(idToScroll);
} else {
$target = element;
}
$("body").animate({scrollTop: $target.offset().top}, 1500, 'easeInOut
});
}
}
}
});