Javascript 如何更新作为属性传入的范围变量
我试图创建一个指令,每当元素的scrollTop发生变化时,该指令就会更新范围变量。有了这个指令,我希望能够同步两个不同元素的滚动位置 以下是我目前掌握的情况: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);
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]);
});
});