У меня есть этот код haml в шаблоне,
.movie_container{"ng-repeat" => "movie in movieGroup | orderBy:'release_date'"}
%a{:href => "#", "ui-sref" => ".container-big({value: '{{movie}}'})"} More info
Когда пользователь нажимает на a ui-sref
я загружаю новое состояние с именем home.container-big
. Я также home.container-big
свои данные строки фильма в home.container-big
state, чтобы я мог использовать данные там.
.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);
console.log ($scope.movie)
}
}
}
})
В этом состоянии у меня есть контроллер. В контроллере у меня есть область, называемая фильмами. Строка данных из предыдущего состояния преобразуется в JSON и помещается в мои $scope.movies
поэтому я могу использовать ее в _movie-info.html
,
Все идет нормально.
.container-info{"ng-style" => "{'background-image':'url(https://image.tmdb.org/t/p/w1280{{movie.backdrop}})'}"}
%ul.trailers
%li{"ng-repeat" => "trailer in filteredTrailers = (trailers | filter: { movie_id: movie.movie_id})"}
%a{"ui-sref" => ".container-big-trailer({value: '{{ trailer.link }}' })"} {{ trailer.link }}
.container-trailers
%div{"ui-view" => "youtube_trailer"}
В этом шаблоне я делаю список всех трейлеров в своем db и фильтрую их с помощью movie_id. Когда пользователь нажимает на a ui-sref=".container-big-trailer
я ввожу новое состояние, называемое .container-big-trailer
и trailer.link
данные из trailer.link
как значение для этого состояния.
И в этот клик я получаю ошибку
SyntaxError: Unexpected token y
at Object.parse (native)
Похоже, что токен имеет какое-то отношение к значению trailer.link
потому что токен является первым признаком значения trailer.link
, за исключением трейлеров, начинающихся с буквы N или F (и, возможно, еще нескольких).
* РЕДАКТИРОВАТЬ *
Если я удалю {value: '{{ trailer.link }}' }
из ссылки ui-sref
а затем нажмите так,
%ul.trailers
%li{"ng-repeat" => "trailer in filteredTrailers = (trailers | filter: { movie_id: movie.movie_id})"}
%a{"ui-sref" => ".container-big-trailer()"} {{ trailer.link }}
И затем console.log, каково значение моего состояния .container-big-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.value = $stateParams.value;
console.log ('big-trailer' + $scope.value)
}
}
}
})
Он выводит строковые данные значения, заданного с состоянием home.container-big
.
Если кто-то другой сталкивается с той же проблемой. Ошибка заключалась в том, что я определил свои $stateParams
с одинаковым value
. Я думал, что value
- это способ получить данные, но это просто имя. Я изменил одно value
на movie_info
и заменил его также в шаблоне, и теперь он работает.