AngularJS-在新的浏览器窗口中打开控制器时,在子窗口上单击会随机触发父窗口上的事件

时间:2018-07-25 22:59:03

标签: javascript angularjs angular-ui-router

我有一个要求要尝试执行的操作如下- 我有一个审核日志页面,该页面上有一个按钮可在新的浏览器窗口中显示日志,同时继续在主窗口中打开的应用程序上执行其他操作。 我们使用ui-router和angularjs(1.6)。以下是我的代码-

路由到控制器-

 .state('auditlog', {
        url: '/auditlog',
        templateUrl: 'app/system/audit/audit-log.html',
        controller: 'AuditLogController',
        controllerAs: 'al'
    })

在其他控制器中的按钮的click事件上,我有以下代码-

unDockEventsPanel(event) {
    let location = this.$state.href('auditlog');
    this.$window.open(location, '', 'scrollbars=no,fullscreen=yes,toolbar=no');
}

和HTML-

<i class="Icon-MoveOut Icon-Large icon-btn" ng-click="eventsPanelVM.unDockEventsPanel($event)">

现在,当我单击“ MoveOut”按钮时,将调用unDockEventsPanel()方法,并在路由定义“ auditlog”中打开一个包含控制器/模板内容的新窗口。

但是,我面临的问题是,我在子窗口上执行的任何操作都会随机触发父窗口上的其他操作,反之亦然。例如。当我在子窗口中单击一个选择按钮时,该选择会在子窗口中打开,但在父窗口中,一个文本框也会像我单击它一样聚焦。同样,当我单击父项上的选择时,子项上的其他控件也会突出显示。

我可以看到未在子级上创建应用程序/控制器的新实例,因此两者之间的控件和事件存在重叠。但是我不知道如何将两者隔离。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为该问题与“ $ state”的使用有关

let location = this.$state.href('auditlog');
this.$window.open(location, '', 'scrollbars=no,fullscreen=yes,toolbar=no');

来自angular-ui github wiki

  

激活状态后,其模板会自动插入其父州模板的ui视图中。

我建议尝试通过使用普通的旧Javascript进行新的窗口导航来避免使用$ state

window.open("{yourURL}/auditlog", 'scrollbars=no,fullscreen=yes,toolbar=no');