我想将一个对象传递给一个controllerA到另一个controllerB并显示该对象。为此,我使用ui-router和angularjs。
这是我的controllerA,它使用$state.href()
构建网址:
const url = $state.href('home.stateA', {
objectA: objectA
});
window.open(url, '_blank');
现在,这是我的路线档案:
.state('home.stateA', {
url: '/stateA',
template: '<template-b></template-b>',
params: {
// object: null
objectA: null
}
})
最后,我试着像我那样在控制器B中获取对象:
// $scope.object = $stateParams.object;
$scope.object = $stateParams.objectA;
当我console.log
$scope.object
时,我获得null
这是我的路线文件中的默认值。
那么出了什么问题?我想知道$window.open
是不是问题。
感谢您的帮助。
答案 0 :(得分:0)
我建议你使用url参数。
.state('home.stateA', {
url: '/stateA?object',
template: '<template-b></template-b>',
params: {
object: null
}
})
打开新标签页时执行
const url = $state.href('home.stateA', {
objectA: JSON.stringify(objectA)
});
在controllerB中
$scope.object = JSON.parse($stateParams.objectA);
因为当你打开新标签时。国家参数丢失了
答案 1 :(得分:0)
window.open(url, '_blank');
您正在打开一个新窗口并尝试传递一个对象。
传递字符串/数字
如果状态网址定义为'/stateUrl/:id'
,则可以将字符串/数字说明ID作为网址的一部分传递
然后您可以使用$stateParams.id
分享对象
您可以使用localStorage以及JSON.stringify
和JSON.parse
来共享该对象。
设置数据
localStorage.setItem('object', JSON.stringify(object));
获取数据
var object = JSON.parse(localStorage.getItem('object'));
答案 2 :(得分:0)
我刚刚找到了解决方案 - &gt;
ControllerA
const url = $state.href('stateA');
let newTab = $window.open(url);
newTab.objectA = objectA;
ControllerB:
$scope.objectA = $window.objectA
状态非常简单:
.state('home.stateA', {
url: '/stateA',
template: '<template-b></template-b>',
})
我不知道它是否是实现我所需要的最佳方式,但至少它是有效的。它可以帮助别人。
谢谢你们,祝你们度过愉快的一天!