2016-07-07 81 views
4

因此,一个$范围功能,我有两个单页的应用程序,这两个应用程序都包含项目的列表,在Application A我们有List A,并在Application B我们有List B打开新窗口,运行在该窗口中,更好的办法

List A的物品可以是用于项目父在List B,一对多的关系。

如果用户点击App A一个项目,他得到选项view related items,这将在单独的窗口(新标签)开拓App B,并在App A过滤List B,只显示相关项目的点击项目。

这意味着我必须打开一个新窗口,并在该窗口准备就绪时运行一个函数,并通过点击项目的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();访问scope,然后运行我setFilter(id)功能

这有效,但我不能相信这是最好的方式去做这件事。

tl; dr我该如何打开一个新窗口,然后在新应用程序上运行$ scope函数,这种方式并不是不好的做法?

编辑:我看到人们所提出的建议$routeparams,但我真的不知道如何工作的,或者如果它在我的应用程序工作(他们都是单页的应用程序),那这样进一步说明会是伟大的

+0

难道你不能将这两个页面分成一个角度应用程序? – Chinni

+0

@Chinni这是我的第一个方法,但第二个应用程序被广泛使用,并且只在某些情况下是与第一个应用程序中的列表相关的项目 – klskl

回答

3

发送ID作为GET参数向应用B然后,您可以直接访问它的控制器不使用$ routeParams任何延误。

2

在应用程序A,你不需要任何特殊代码打开了一扇窗。您的标记中只有一个target="blank"链接。

<a href="http://applicationB_url/{{itemA.id}}/items" target="blank">{{itemA.name}}</a> 

然后在应用程序B,这取决于你的路由器上,使用$stateParams(用于ui router)或$routeParams访问ID在你的控制器。

如果你想运行在启动功能,只需检查该ID在你的应用程序B控制器的存在。喜欢的东西:

if($stateParams.id) { 
    // do something 
} 
2

我将建议改变重定向为以下 var popup = window.open('newPageUrl?id=' + id);

,然后在第二个网页,只是解析标识出的URL:

var search = document.location.href; 
var id = JSON.parse('{"' + decodeURI(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}')['id']; 

一更好的替代方法是将数据存储为曲奇 cookiesave('id', id); 然后 var id = cookieget('id');