AngularJS新手求助:如何访问传递的[object object]类型数据
解决AngularJS状态间传递JsonObject的问题
嘿,我来帮你搞定这个问题~你现在遇到的核心问题是:直接把对象塞到URL参数里,而URL只能处理字符串,所以对象被自动转成了[object Object],导致目标状态拿不到真实数据。下面给你两种靠谱的解决方案:
方案一:用状态params传递(推荐,适合复杂对象)
这种方式不会把对象暴露在URL里,更安全也更适合传递复杂数据,步骤如下:
修改状态配置:
去掉URL里的{viewD},新增params属性来定义这个参数,同时修正name属性(状态名不要写路径,保持纯名称):viewApp.config(function($stateProvider){ $stateProvider .state('edit', { name: 'edit', // 这里改成纯状态名,不要带#/路径 url: '/register', // 移除URL中的{viewD} templateUrl: function(){ return path+'/register.jsp'; }, controller:'registerCtrl', params: { viewD: null // 定义这个参数,无需出现在URL中 }, resolve : { loadPlugin: function($ocLazyLoad) { return $ocLazyLoad.load([{ name : 'registerA...' }]); } } }); });跳转代码保持不变:
你原来的跳转逻辑不用改,$state.go会自动把对象存入params:viewScope.edit=function(d) { var viewData = { 'name' : d.name }; $state.go('edit', {'viewD': viewData}, {reload: true}); };在目标控制器中接收数据:
注入$stateParams,直接获取对象:viewApp.controller('registerCtrl', function($scope, $stateParams) { // 拿到传递过来的对象 var receivedData = $stateParams.viewD; // 可以直接访问属性 console.log('接收的名称:', receivedData.name); });
方案二:转成JSON字符串通过URL传递(适合简单对象)
如果一定要把数据放在URL里(不推荐复杂对象,因为URL有长度限制),可以把对象转成JSON字符串,目标状态再解析回来:
跳转时转成字符串:
viewScope.edit=function(d) { var viewData = { 'name' : d.name }; // 把对象转成JSON字符串 var viewDataStr = JSON.stringify(viewData); $state.go('edit', {'viewD': viewDataStr}, {reload: true}); };状态配置保留URL参数:
你的原配置里url: '/register/{viewD}'可以保留,不用改。目标控制器解析字符串:
viewApp.controller('registerCtrl', function($scope, $stateParams) { // 拿到URL里的字符串 var receivedDataStr = $stateParams.viewD; // 解析回对象 var receivedData = JSON.parse(receivedDataStr); console.log('接收的名称:', receivedData.name); });
注意:这种方式如果对象里有特殊字符(比如斜杠、引号)可能会出现解析问题,而且URL长度有限制,所以优先用方案一哦~
内容的提问来源于stack exchange,提问作者Deepak Verma
相关产品推荐
相关产品推荐

