【问题标题】:How to access data of [object object] AngularJS如何访问 [object object] AngularJS 的数据
【发布时间】:2018-04-20 05:38:39
【问题描述】:

我是 AngularJS 的新手。 我正在将 JsonObject 发送到另一个状态。

例如:

viewScope.edit=function(d) {

   var viewData = {
      'name' : d.name,
   };

   $state.go('edit', {'viewD': viewData}, {reload: true});
};

我的州是-

viewApp.config(function($stateProvider){
    $stateProvider
        .state('edit', {
            name: '#/edit',
            url: '/register/{viewD}',
            templateUrl: function(){    
                 return path+'/register.jsp';
             },
             controller:'registerCtrl',
             resolve : {
                 loadPlugin: function($ocLazyLoad) {
                     return $ocLazyLoad.load([{
                         name : 'registerApp',
                         files: [path+'/resources/js/register.js'],
                     }])
                }
            }
        })
});

在注册控制器中获取数据-

regApp.controller('registerCtrl',function($stateParams){                 
        if($stateParams != undefined){
            console.log($stateParams.viewD);
        }
});

在控制台输出上是- [object object]

如何从这个 [object object] 访问 name 键。

console.log($StateParams.viewD.name); // 不工作

JSON.parse,JSON.stringify 不起作用。

【问题讨论】:

  • $stateParams 的内容是什么? $stateParams.viewD 的类型是什么?
  • @Weedoze $stateParams 的内容是 viewD : "[object Object]"
  • 你在哪里看到这个[object Object]?在控制台中?你能扩展它吗? console.log(typeof $stateParamas.viewD)的结果是什么
  • @Weedoze 在控制台中是的。不,我无法扩展它。它的类型是字符串
  • 尝试用url: '/register/{viewD:json}',替换你在状态配置中的url

标签: javascript angularjs angular-ui-router


【解决方案1】:

您必须从

更改您的状态配置 URL
url: '/register/{viewD}',

url: '/register/{viewD:json}',

0.2.13版本增加了JSON参数类型

【讨论】:

    【解决方案2】:

    如下改变你的配置方法,

    viewApp.config(function($stateProvider){
    $stateProvider
        .state('edit', {
            name: '#/edit',
            url: '/register',
            params: {
               viewD: null
            }
            templateUrl: function(){    
                 return path+'/register.jsp';
             },
             controller:'registerCtrl',
             resolve : {
                 loadPlugin: function($ocLazyLoad) {
                     return $ocLazyLoad.load([{
                         name : 'registerApp',
                         files: [path+'/resources/js/register.js'],
                     }])
                }
            }
        })
    });
    

    然后你可以在控制器中像这样从$state 访问你的对象, $state.params.viewD 或来自$stateParams 喜欢这个$stateParams.viewD

    现在试试console.log($state.params.viewD.name)

    【讨论】:

    • console.log($stateParams.viewD); output= {name : "abc"} 但 console.log($stateParams.viewD.name);在应用加载未定义名称期间给出错误。
    • 试试这个看看你的视图类型D console.log(typeof $stateParams.viewD),如果是string JSON.parse($stateParams.viewD).name 会返回名称
    • 给出错误 --- SyntaxError: JSON.parse($stateParams.viewD).name 上位置 0 处的 JSON 中的意外标记 u
    • 似乎您的 $stateParams.viewD 对象未定义。 if($stateParams.viewD) JSON.parse($stateParams.viewD).name 试试这个。如果它没有进入 if 检查您的 viewD 来源
    • 它不是未定义的,它属于 if($StateParams.viewD){ 并且仍然错误。我做什么?
    猜你喜欢
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多