子控制器从父级激发JSON.parse

时间:2015-12-08 16:15:46

标签: angularjs json

在我的应用程序中,我有一个ui-router状态home.container-big,并且该状态具有嵌套状态home.container-big.container-big-trailer

home.container-big状态下,我以字符串的形式返回一个值。对于我的movie-info.html模板,我需要将字符串值更改为对象。所以我使用JSON.parse

.state('home.container-big',{
  params: {
    value: null
  },
  url: '',
  views: {
    "container-big":{
      templateUrl: '../assets/angular-app/templates/_movie-info.html',
      controller: function($scope, $stateParams, $state) {
        $scope.movie = JSON.parse($stateParams.value);
        $scope.movie = $stateParams.value;
      }
    }
  }
})

home.container-big.container-big-trailer状态下,我返回一个字符串值并将数据放在$scope.trailer_link中,以便我可以使用_container-trailer模板中的范围。

.state('home.container-big.container-big-trailer',{
  params: {
    value: null
  },
  url: '',
  views: {
    "youtube_trailer":{
      templateUrl: '../assets/angular-app/templates/_container-trailer.html',
      controller: function($scope, $stateParams, $state) {
        $scope.trailer_link = $stateParams.value);
        console.log ($scope.trailer_link)
      }
    }
  }
})

我的问题是,$stateParams.value内的home.container-big.container-big-trailer也会从父状态JSON.parse通过home.container-big。这导致错误,

SyntaxError: Unexpected token R
  at Object.parse (native)

因为如果从路由器控制器中删除JSON.parse,所有代码都能正常工作,但模板内部的数据存在一些问题。

1 个答案:

答案 0 :(得分:0)

为了完成,这里的问题是两个州中$stateParams.value的双重定义。我在父状态下将value更改为movie-info,然后更改模板中的参数以使其对应。