所以,我有两个单页应用程序,这两个应用程序都包含一个项目列表,在 Application A
中我们有 List A
,在 Application B
我们有 列表 B
。
List A
中的项目可以是 List B
中项目的父级,一对多关系。
如果用户单击 App A
中的项目,他将获得查看相关项目
的选项,这将打开 App B
一个单独的窗口(新选项卡),并过滤 List B
以仅显示与 App A
中单击的项目相关的项目。
这意味着我必须打开一个新窗口,并在该窗口准备就绪时运行一个函数,并传递所点击项目的 ID
以过滤我的列表。
$scope.openNewWindow = function(id){
var popup = window.open('newPageUrl');
// check to see when opened page is ready
var readyStateCheckInterval = setInterval(function() {
if (popup.document.readyState === "complete") {
clearInterval(readyStateCheckInterval);
// function on App B
popup.functionToRunWhenReady(id);
}
}, 50);
};
functionToRunWhenReady()
函数是一个 javascript 函数,必须运行实际函数来过滤我的列表,这是一个 $scope
函数,原因是我无法从其他应用程序访问 $scope
函数
function functionToRunWhenReady(id) {
angular.element(document).ready(function () {
var scope = angular.element($('#myAppDiv')).scope();
scope.$apply(function() {
// scope function to filter the list
scope.setFilter(id);
});
});
}
正如您在这里看到的,我检查 document
是否准备就绪,通过 var scope = angular.element($('#myAppDiv' )).scope();
然后运行我的 setFilter(id)
函数
这行得通,但我不敢相信这是解决此问题的最佳方法。
tl;dr 如何打开一个新窗口,然后在新应用程序上运行 $scope 函数,以一种不错的做法?
编辑:我看到有人建议使用 $routeparams
,但我真的不知道它是如何工作的,或者它是否适用于我的应用程序(它们都是 < em>单页应用),所以对此的进一步解释会很棒
最佳答案
将 ID 作为 GET 参数发送到应用程序 B。然后您可以使用 $routeParams 直接在 Controller 中访问它而不会造成任何延迟。
关于javascript - 打开新窗口,在该窗口中运行 $scope 函数,更好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38239835/