Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.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_Html_Angularjs - Fatal编程技术网

Javascript 角度不刷新/更改值

Javascript 角度不刷新/更改值,javascript,html,angularjs,Javascript,Html,Angularjs,首先,我想说的是,我正在使用socket.io,并向它们发送数据。数据是在连接(所以网站不是空白)和发生某些事情时发出的。在这种情况下,在连接(页面刷新)时,所有内容都会更新并工作良好。在网站上有两个问题: roundValue不实时更新,仅在页面刷新时更新 当$scope.data.value(油炸圈饼图的值)正在增加一切时 工作,但一旦我想让它回到0并重新开始,它就不工作了。它开始闪烁,每秒从新的不同值中获取20次数据(因此图表一直在从值0到30变化,闪烁) 我的控制器(最后部分不重要)

首先,我想说的是,我正在使用socket.io,并向它们发送数据。数据是在连接(所以网站不是空白)和发生某些事情时发出的。在这种情况下,在连接(页面刷新)时,所有内容都会更新并工作良好。在网站上有两个问题:

  • roundValue不实时更新,仅在页面刷新时更新
  • $scope.data.value
    (油炸圈饼图的值)正在增加一切时
工作,但一旦我想让它回到0并重新开始,它就不工作了。它开始闪烁,每秒从新的不同值中获取20次数据(因此图表一直在从值0到30变化,闪烁)

我的控制器(最后部分不重要):


我想页面上的值并不重要,它们只是从
$scope.roundValue
$scope.data.value

中获取的。问题是,来自socket.io的异步事件不会触发Angular的摘要周期。通常,Angular的原生$http、$timeout等服务都会自动触发摘要周期。当您使用与Angular无关的事件源时,您需要自己触发摘要循环。更新作用域属性后,尝试在socket.io事件处理程序中调用
$scope.$digest()

例如:

    mySocket.on('newConnectionCounter', function (itemsInRoundCounter, valueOfRound) {
        $scope.data.value = itemsInRoundCounter;
        $scope.roundValue = valueOfRound;
        $scope.$digest();
    });
另一种味道也能达到同样的效果:

    mySocket.on('newConnectionCounter', function (itemsInRoundCounter, valueOfRound) {
        $scope.$apply(function () {
            $scope.data.value = itemsInRoundCounter;
            $scope.roundValue = valueOfRound;
        });
    });
您还可以使用类似的包装器免费获取摘要周期触发


对于您提到的第二个问题,如果不了解mySocket服务是如何实现的,很难说出来。

我尝试了这两种方法,但不幸的是,似乎没有一种方法更新它。下面是我如何实现套接字(使用btford.socket io)
    mySocket.on('newConnectionCounter', function (itemsInRoundCounter, valueOfRound) {
        $scope.$apply(function () {
            $scope.data.value = itemsInRoundCounter;
            $scope.roundValue = valueOfRound;
        });
    });