angularjs - 使用 scope.$eval 将参数传递给指令回调

标签 angularjs angularjs-directive

我有一个在移动鼠标时调用的鼠标滚轮指令。但是如何在回调中传递滚动位置呢?

export function ngMouseWheelDown() {
    return function (scope: angular.IScope, element, attrs) {
        element.bind("DOMMouseScroll mousewheel onmousewheel",
            function (event) {

                // cross-browser wheel delta
                var event = window.event || event; // old IE support
                var delta = Math.max(-1, Math.min(1, (event.wheelDelta || -event.detail)));

                if (delta < 0) {
                    scope.$apply(function () {
                        scope.$eval(attrs.ngMouseWheelDown);
                    });
                }
            });
    }
}

HTML

<div ng-mouse-wheel-up="$ctrl.scrollEvent($event)"
     ng-mouse-wheel-down="$ctrl.scrollEvent($event)"
     style="overflow-y: auto;">

最佳答案

使用 $eval 方法的 locals 参数:

export function ngMouseWheelDown() {
    return function (scope: angular.IScope, element, attrs) {
        element.bind("DOMMouseScroll mousewheel onmousewheel",
            function (event) {

                // cross-browser wheel delta
                var event = window.event || event; // old IE support
                var delta = Math.max(-1, Math.min(1, (event.wheelDelta || -event.detail)));

                if (delta < 0) {
                    var locals = {$event: event, $delta: delta};
                    scope.$apply(function () {
                        scope.$eval(attrs.ngMouseWheelDown, locals);
                    });
                }
            });
    }
}

用法:

<div ng-mouse-wheel-up="$ctrl.scrollEvent($event, $delta)"
     ng-mouse-wheel-down="$ctrl.scrollEvent($event, $delta)"
     style="overflow-y: auto;">

有关详细信息,请参阅 - AngularJS scope.$eval API Reference

关于angularjs - 使用 scope.$eval 将参数传递给指令回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50991919/

相关文章:

javascript - 为每个数据集创建一个 Highchart

javascript - 在每个模板/ Controller onload 上调用一个函数

javascript - 即使我的情况按预期发生变化,Angular ngClass 也没有更新我的类

javascript - Firebase 图像数组的异步加载

angularjs - 从指令更新范围变量

angularjs指令: how to encapsulate css?

javascript - 验证多个日期字段

javascript - ng 样式/动态照片网格上的 Angular 摘要循环

javascript - typescript :注入(inject)泛型并获取 ES6 模块名称

javascript - 输入显示与 ng-model 中的值不同的值