如何在更新范围后更新angularjs页面?

 莫名2602913353 发布于 2023-02-10 22:52

我编写了一个捕获键盘事件的指令,在某些键上我更新了作用域中的一些对象.我们的想法是上下移动一个数组并显示所选的行详细信息.问题是在我执行另一个更新页面的操作之前,页面不会更新.我怎么强迫这个?

这是指令:

LogApp.directive("keyCapture", [function(){
    var scopeInit;
    return{
        link: function(scope, element, attrs, controller){
            scopeInit = scope
            element.on('keydown', function(e){
                scopeInit[attrs.keyCapture].apply(null, [e]);                
            });
        }
    }
}]);

像这样绑定模板:


控制器方法:

$scope.movePreview = function(e){
    if ($scope.events.length === 0)
        return;
    // Find the element 
    if (e.keyCode === 38 || e.keyCode === 40){
        console.log("Pressed %s", e.keyCode);
        var offset = 0;
        if (e.keyCode === 38 && $scope.previewIndex > 0)
            offset = -1;
        else if (e.keyCode === 40 && $scope.previewIndex < $scope.events.length -1 )
            offset = 1;

        $scope.previewIndex += offset;
        var eventId = $scope.events[$scope.previewIndex].uuid;
        $scope.showEvent(eventId);
        e.preventDefault();
    }
};

$scope.showEvent(eventId)将获取具有给定ID的项目并将其显示在页面的另一部分中.在执行其他操作之前不会更新的部分,例如单击按钮.是否可以强制页面更新?

这是一个重现的小提琴:http://jsfiddle.net/gM2KF/1/ 如果你点击按钮,计数器就会更新.如果按任意键,则不显示任何内容.但是再次单击该按钮,您会看到计数器已被键盘事件更新,但未显示.

1 个回答
  • 如果您正在收听非角度事件:

    element.on('keydown', function(e){
        scopeInit[attrs.keyCapture].apply(null, [e]);                
    });
    

    然后,要更新范围,您需要调用scope.$apply:

    element.on('keydown', function(e){
        scopeInit[attrs.keyCapture].apply(null, [e]); 
        scope.$apply();               
    });
    

    这将启动角度$digest循环并允许更改绑定.

    2023-02-10 23:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有