我在角度应用程序中使用ui-router进行状态导航,在其中一个场景中我必须导航到另一个选项卡中的新状态。
我有以下状态
.state("code",
{
url: "/code",
params: { offer : null },
templateUrl: "app/components/coupons/views/code.html"
})
param中的提议是一个对象。 在同一浏览器中导航到此状态时,它可以正常工作。但是当在不同的浏览器中导航到此状态时,提供的内容为null。
另一位用户在http://stackoverflow.hex1.ru/questions/33232761/ui-router-open-state-in-new-tab-with-target-blank-params-are-lost发布了同样的问题,但这里的param是属性而不是对象。因此,它可以添加到网址。
谢谢, 萨姆
答案 0 :(得分:1)
当您打开新标签页时,会在新标签页中创建新应用实例,因为它基于javascript,并且在页面新鲜时不会保留其参数。因此,您的状态加载null
参数,因为此页面与您拥有的其他页面无关。
作为解决方法,我建议您将数据附加到$window
并在新页面上检索。
答案 1 :(得分:1)
我已经在打字稿中完成了它的工作原理:
var myWindow=this.$window;
var myData={data:'testData'};
myWindow.localStorage.myData=JSON.stringify(myData);
window.open(this.state.href('state', {}, {absolute: false, inherit: true}));
然后在新标签控制器中:
var myWindow=this.$window;
var myData=JSON.parse(myWindow.localStorage.myData);
答案 2 :(得分:0)
干净的方法是不要打开新的浏览器标签。正如新浪所说,你的角度应用程序的新实例已经创建。这意味着可能在服务中保留的所有状态都将丢失。想不出其他可能性:
答案 3 :(得分:0)
params
属性url
属性更改为:url: "/code?offer",
)$state.href()
对象调用offer
之前-使用JSON.stringify(offer)
将其转换为字符串JSON.parse(offer)
关于其他人建议的 localStorage 解决方案-它会出现以下问题: