【发布时间】:2017-09-17 11:52:45
【问题描述】:
我有以下角度指令。它使用范围滑块滚动项目的水平 div。如果仅应用于一行,它就可以工作。但如果应用于多个......什么也不会发生。嵌入有效,但函数从不运行,也没有给出错误。我该怎么做才能使其更具角度通用性并适用于多个元素?这是repro:CodePen
app.directive('bob', function () {
return {
restrict: 'A',
transclude: true,
template:
`<div style="background-color: #333"><input type="range" value="0" id="scroll-rangeb"><div id="photo-containerb" style="display: flex; overflow-x: scroll; flex-direction: row; align-items: center; height: 90%;" ng-transclude></div></div>`,
link: function (scope, element, attrs) {
var scroll = document.getElementById("scroll-rangeb");
scroll.oninput = function () {
var panel = document.getElementById("photo-containerb");
var total = panel.scrollWidth - panel.offsetWidth;
var percentage = total * (this.value / 100);
panel.scrollLeft = percentage;
}
}
};
});
【问题讨论】:
-
在黑暗中拍摄,但您是否尝试过隔离范围?
-
@zero298 无法使用隔离范围。立即创建重现。
-
您为什么希望这可以处理多个项目?您正在手动引用单个 id!这是一种非常“不合时宜”的方式。
-
@DavidL 我对 Angular 和 jQuery 背景比较陌生。仍然不了解“Angular”方式。我还用 .getElementsByClassName 切换了 .getElementById,但仍然没有成功。
-
多个组件尝试使用相同的 ID,这是行不通的。如果需要爬取 DOM,至少只在单个组件的元素内进行爬取。 (通常在 Angular 中,你不想爬取 DOM,如果组件需要访问特定的子节点,你可以在模板中进行,或者在组件实例化时绑定它们。)
标签: javascript angularjs angular-directive