Javascript 在angularjs中绑定break$scope吗?

Javascript 在angularjs中绑定break$scope吗?,javascript,angularjs,Javascript,Angularjs,我正在尝试为图像绑定滚动,以便根据滚动位置更改$scope值。然而,我正在做的事情是打破值的绑定。以下是JSFIDLE: $scope.testFun=函数(a){ 如果(a.target.scrollLeft100){ $scope.something.yes=false; } }; b、 绑定('scroll',$scope.testFun); 当“something.yes”更改时(因为您已滚动超过100px),它应该会触发div上的“ng show”和文本“something”。它不

我正在尝试为图像绑定滚动,以便根据滚动位置更改$scope值。然而,我正在做的事情是打破值的绑定。以下是JSFIDLE:

$scope.testFun=函数(a){
如果(a.target.scrollLeft<100){
$scope.something.yes=true;
}否则如果(a.target.scrollLeft>100){
$scope.something.yes=false;
}
};
b、 绑定('scroll',$scope.testFun);
当“something.yes”更改时(因为您已滚动超过100px),它应该会触发div上的“ng show”和文本“something”。它不是。不过,我知道它们最初是连接的,因为启动时something.yes具有适当的值


我不确定我是如何搞乱“$scope.something”上的绑定的。

如果您使用bind或on作为添加事件侦听器的快捷方式(或者添加您自己的侦听器),那么您需要在事件处理程序中自己触发$scope上的$apply。调用$apply会导致运行$digest,而$digest将检查所有$watchers设置,以查看是否需要更新任何内容。

即使您正在调用
$scope
函数,但从技术上讲,它不在digest循环中,因为它位于事件侦听器上。这类事情通常只在指令内完成

要使其发挥作用,您只需强制执行摘要:

function testFun(a) {
    $scope.$apply(function() {
        console.log("a", $scope.something);
        if (a.target.scrollLeft < 100) {
            $scope.something.yes = true;
        } else if (a.target.scrollLeft > 100) {
            $scope.something.yes = false;
        }
    });
}

b.bind('scroll', testFun);
函数测试乐趣(a){
$scope.$apply(函数(){
log(“a”,$scope.something);
如果(a.target.scrollLeft<100){
$scope.something.yes=true;
}否则如果(a.target.scrollLeft>100){
$scope.something.yes=false;
}
});
}
b、 绑定('scroll',testFun);

您需要在$scope.testFun中使用
$scope.$apply()
,因为绑定时它不是角度绑定

  $scope.testFun = function(a) {
                console.log("a", $scope.something);
            if (a.target.scrollLeft < 100) {
                $scope.something.yes = true;
            } else if (a.target.scrollLeft > 100) {
                $scope.something.yes = false;
            }
            $scope.$apply();
        };
$scope.testFun=函数(a){
log(“a”,$scope.something);
如果(a.target.scrollLeft<100){
$scope.something.yes=true;
}否则如果(a.target.scrollLeft>100){
$scope.something.yes=false;
}
$scope.$apply();
};

工作

为什么要将
设置为字符串?还是函数的第一个参数?或者,
b
不是一个函数吗?
  $scope.testFun = function(a) {
                console.log("a", $scope.something);
            if (a.target.scrollLeft < 100) {
                $scope.something.yes = true;
            } else if (a.target.scrollLeft > 100) {
                $scope.something.yes = false;
            }
            $scope.$apply();
        };