其他分享
首页 > 其他分享> > 超时调用时,角度双向绑定不起作用

超时调用时,角度双向绑定不起作用

作者:互联网

因此,我有一个HTML模板,其中包含以下角度表达式{{player.score}}.存储在范围对象中的播放器的初始分数会在表达式的位置正确呈现.

现在,我有一个按钮,单击该分数需要更新.如果我简单地用硬编码值更新球员得分,则它可以正常工作:

$scope.updateScore = function (){
     $scope.player.score = 1000; //this is updated without any issues
};

但是我的问题是我的球员得分是一个复杂的计算,需要我使用_.defer.因此,当我将我的早期代码(用于测试)包装在_.defer中时,它不起作用:

 $scope.updateScore = function (){
         _.defer(function() {
              $scope.player.score = 5000; //this is not updated...
         });
    };

我了解_.defer的方式只是setTimeout的下划线包装.我希望无论_.defer使用什么延迟,当它最终更新分数时,由于Angular双向绑定,它将在HTML中得到体现.

但这仅在使用_.defer时才发生,否则它会按预期工作. _.defer也在更新Angular对象,因为如果我在延迟的代码中执行console.log(player.score),那么在控制台中几秒钟后,我确实会看到更新分数(5000).

任何语言/ Javascript专家都可以帮助我理解我做错了什么以及如何解决.请注意,由于各种技术/传统原因,删除_.defer并不是真正的选择.

我只是想弄清楚为什么当以延迟方式更新对象时,Angular不更新视图.

任何指针,不胜感激.

解决方法:

Angular不会“知道”此延迟,因此即使值被更新,它也不会出现在视图中,直到下一个摘要循环.
您可以将$timeout注入您的控制器并像这样使用它:

_.defer(function() {
     $timeout(function() {
          $scope.player.score = 5000; //this is not updated...
     });
});

您还应该阅读有关斜角对象的延迟对象(https://docs.angularjs.org/api/ng/service/ $q)

标签:html5,angularjs,underscore-js,javascript,jquery
来源: https://codeday.me/bug/20191119/2033949.html