You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS新手求助:如何访问传递的[object object]类型数据

解决AngularJS状态间传递JsonObject的问题

嘿,我来帮你搞定这个问题~你现在遇到的核心问题是:直接把对象塞到URL参数里,而URL只能处理字符串,所以对象被自动转成了[object Object],导致目标状态拿不到真实数据。下面给你两种靠谱的解决方案:

方案一:用状态params传递(推荐,适合复杂对象)

这种方式不会把对象暴露在URL里,更安全也更适合传递复杂数据,步骤如下:

  1. 修改状态配置:
    去掉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...' }]);
            }
          }
        });
    });
    
  2. 跳转代码保持不变:
    你原来的跳转逻辑不用改,$state.go会自动把对象存入params:

    viewScope.edit=function(d) { 
      var viewData = { 'name' : d.name }; 
      $state.go('edit', {'viewD': viewData}, {reload: true}); 
    };
    
  3. 在目标控制器中接收数据:
    注入$stateParams,直接获取对象:

    viewApp.controller('registerCtrl', function($scope, $stateParams) {
      // 拿到传递过来的对象
      var receivedData = $stateParams.viewD;
      // 可以直接访问属性
      console.log('接收的名称:', receivedData.name);
    });
    

方案二:转成JSON字符串通过URL传递(适合简单对象)

如果一定要把数据放在URL里(不推荐复杂对象,因为URL有长度限制),可以把对象转成JSON字符串,目标状态再解析回来:

  1. 跳转时转成字符串:

    viewScope.edit=function(d) { 
      var viewData = { 'name' : d.name }; 
      // 把对象转成JSON字符串
      var viewDataStr = JSON.stringify(viewData);
      $state.go('edit', {'viewD': viewDataStr}, {reload: true}); 
    };
    
  2. 状态配置保留URL参数:
    你的原配置里url: '/register/{viewD}'可以保留,不用改。

  3. 目标控制器解析字符串:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:16:20