如何使用范围中一个对象的数据?

时间:2015-12-08 10:05:17

标签: angularjs angular-ui-router

我有一个名为home.test的州。在这种状态下,我将模板_movie-info.html注入视图。

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

我在视图控制器中创建了一个名为$scope.movie的范围,并插入了从ui-sref操作传递的值。当我进入控制台日志显示的home.test状态时,

{"id":7,"title":"Batman v Superman: Dawn of Justice","release_date":"2016-03-24","image":"/eJrlh2g9UGAd7R6mQAOQIIs329H.jpg","user_id":null,"created_at":"2015-12-07T15:17:47.287Z","updated_at":"2015-12-07T15:17:47.287Z","movie_id":"209112","imdb_rating":"N/A","backdrop":"/4YxoxVGu93ta0H4u0B98niGIUAu.jpg"}

但是当我尝试使用这些数据时,它并没有起作用。这是因为我拿走了对象的value并将其插入$scope.movie

movie title: {{ movie.title }}

因为如果我为我的范围创建一个模型,那么

$scope.movie = {title: 'something cool'}

和它一样显示的控制台日志,

Object {title: "something cool"}

{{ movie.title }}有效。

*编辑*

我怀疑问题是$stateParams如何返回数据。如果我使用$stateParams.value,则返回一个字符串。如果我只使用$scope.movie = $stateParams它会返回一个对象,但它看起来很奇怪,

Object{
  value: "{"id":7,"title":"Batman v Superman: Dawn of Justic…A","backdrop":"/4YxoxVGu93ta0H4u0B98niGIUAu.jpg"}"
}
value: "{"id":7,"title":"Batman v Superman: Dawn of Justice","release_date":"2016-03-24","image":"/eJrlh2g9UGAd7R6mQAOQIIs329H.jpg","user_id":null,"created_at":"2015-12-07T15:17:47.287Z","updated_at":"2015-12-07T15:17:47.287Z","movie_id":"209112","imdb_rating":"N/A","backdrop":"/4YxoxVGu93ta0H4u0B98niGIUAu.jpg"}"

1 个答案:

答案 0 :(得分:1)

正如您在编辑中已经注意到的那样 - 数据$stateParams.value的类型为string - 因此请将控制器中的代码更改为:

$scope.movie = JSON.parse($stateParams.value);

并验证控制台输出是否也显示“对象”