Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何更新作为属性传入的范围变量_Javascript_Angularjs_Scroll_Angularjs Directive - Fatal编程技术网

Javascript 如何更新作为属性传入的范围变量

Javascript 如何更新作为属性传入的范围变量,javascript,angularjs,scroll,angularjs-directive,Javascript,Angularjs,Scroll,Angularjs Directive,我试图创建一个指令,每当元素的scrollTop发生变化时,该指令就会更新范围变量。有了这个指令,我希望能够同步两个不同元素的滚动位置 以下是我目前掌握的情况: module.directive('scrollTop', [function() { return { link: function($scope, element, attrs) { var scrollTop = $scope.$eval(attrs.scrollTop);

我试图创建一个指令,每当元素的scrollTop发生变化时,该指令就会更新范围变量。有了这个指令,我希望能够同步两个不同元素的滚动位置

以下是我目前掌握的情况:

module.directive('scrollTop', [function() {
    return {
        link: function($scope, element, attrs) {
            var scrollTop = $scope.$eval(attrs.scrollTop);

            element.bind('scroll', function() {
                $scope.$apply(function() {
                    scrollTop = element.prop('scrollTop');
                    console.log("scrollTop", scrollTop);
                });
            });

            attrs.$observe('scrollTop', function(value){
                console.log('detected change', value);
                element.prop('scrollTop', value);
            });
        }
    };
}]);
这是我为它写的业力测试的一部分:

it('scrolls', function() {
        var element = angular.element('<div scroll-top="scrollTopScopeVar" style="height: 100px; overflow-y: scroll;"><div style="height: 200px;"></div></div>');
        $compile(element)($scope);
        element.appendTo(document.body);
        $scope.$digest();

        element.prop('scrollTop', 42);
        element.trigger('scroll');

        expect($scope.scrollTopScopeVar).toBe(42);
    });
问题是,在scrollTopScopeVar中传递的scrollTop变量永远不会更新。我很确定我的问题是,我只是更新了对那个变量的引用,并没有真正改变它的值,但我不知道如何改变它


谢谢你的帮助

哦,对了,这里的答案非常简单。我需要做的就是直接访问范围并在其中更改变量:

element.bind('scroll', function() {
    $scope.$apply(function() {
        $scope[attrs.scrollTop] = element.prop('scrollTop');  //DUH
        console.log("scrollTop", $scope[attrs.scrollTop]);
    });
});