我目前的锚标记定义为
<a href="" ng-click="controllerFn(scopeVar)">Click here</a>
在控制器功能中,我使用ng-storage($ localStorage设置一些值,然后使用angular-ui路由器进入下一个状态。新链接将在新选项卡中打开。
$scope.controllerFn = function(var){
$localStorage.headings = $localStorage.headings || {};
$localStorage.headings[var.uuid] = var;
var url = $state.href('newstate', {id: var.uuid, name : var.name});
window.open(url,'_blank');
};
这可以按预期工作。
但是,当用户右键单击锚标签并在新标签中选择打开时,它不起作用,用户将被带到主要登录页面而不是新路线。
当用户选择在新标签页中打开时,我想调用“controllerFn”,以便在进入新状态之前设置$ localStorage值,并且链接应该在新标签页中打开。
这可能吗?任何想法?
答案 0 :(得分:0)
问题可能在于您使用角度应用程序,这意味着每次页面(重新)加载时您的应用程序都会初始化。通常你不会真正刷新你的页面,角度只是编辑你的地址栏(路线)而不实际重新加载页面。当您打开新标签页时,您的应用程序已加载,并且找不到您当前的会话/用户对象。
通常,您将拥有由服务器创建的会话上下文。使用$ window.Session存储数据时,数据本身仅在当前窗口中可用。在我看到它时打开一个新选项卡将导致创建一个新会话。
因此,为了使其正常工作,您必须存储某种令牌,并确保每次应用程序启动时检查该令牌是否存在/有效。
angular.module('myApp',[..]).config(function(){
//read token
})