javascript - 处理浏览器 'full screen' 事件时如何访问我的 Angular Controller ?

标签 javascript angularjs events controller

在我的 Angular Controller (这是用于 Google map 指令的 Controller )内,我在文档元素上添加了一个事件监听器,如下所示,这样我就可以使用全屏API:

        if (document.addEventListener) {
            document.addEventListener("webkitfullscreenchange", this.fullScreenChangeHandler, false);
            document.addEventListener("mozfullscreenchange", this.fullScreenChangeHandler, false);
            document.addEventListener("fullscreenchange", this.fullScreenChangeHandler, false);
            document.addEventListener("MSFullscreenChange", this.fullScreenChangeHandler, false);
        }

然后,我在 fullScreenChangeHandler 方法中处理这样的事件,该方法也直接位于 Controller 中:

    fullScreenChangeHandler(event) {

        var containerScope = angular.element(event.srcElement).scope();
        var map = containerScope.map;
        var mapController = containerScope.$parent.mapsCtrl;

因此 (event.srcElement) = 文档节点。这种访问 Controller 的方法是有效的,但不知何故被破坏了。无论如何,代码感觉很臭,所以一定有更好的方法。如果有任何有关方向的建议,我将不胜感激。

最佳答案

我认为还有两种其他方法可以实现您的功能。

1) 使用 $rootScope 触发“fullscreenchange”并监听 Controller 上的事件:

// inside fullScreenChangeHandler
// inject $rootScope 
var $body = angular.element(document.body);           
var $rootScope = $bodyF.injector().get('$rootScope');  
$rootScope.broadcast('FULL_SIZE_CHANGED');

使用 $scope.on('FULL_SIZE_CHANGED',...) 在 MapController 上正常监听事件

2) 在MapController 中编写事件处理程序。

//inside MapController
angular.element($window).on('fullscreenchange', fullScreenChangeHandler);

fullScreenChangeHandler(evt){
    //call resize map here
    scope.resizeMap()
    ...
    // you need $scope.$apply to notify angular about the changes because this event outside of angular context:
    $scope.$apply();
}

我不喜欢 rootScope,如果您只有一个监听器,我更喜欢第二个。

关于javascript - 处理浏览器 'full screen' 事件时如何访问我的 Angular Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46416034/

相关文章:

javascript - 在 ionic 弹出窗口上传递值,但获取 MouseEvent

javascript - 机器人框架 : Error while creating a csv file in Node Js

javascript - 将行移动到新工作表中不同列的脚本

javascript - 在前端使用 Node JS

jquery - 如何将同一个函数绑定(bind)到不同的jQuery事件?

javascript - 如何 Onload() 将焦点设置到 jQuery Handsontable

javascript - 如何仅阻止页面上按键的特定默认操作?

javascript - 如何使谷歌地图不脱离世界界限?

javascript - Angular JS 指令,更改链接函数中的 2 种方式数据绑定(bind)

javascript - AngularJS : can not change parent scope via directive