2015-07-02 3 views
3

У меня есть URL-адрес, который передается в мой Угловой код через Rails. Однако, когда я пытаюсь выбрать параметр в URL-адресе, он отображается как пустой. Может кто-нибудь мне помочь?

Пример URL: http://localhost:3000/events/event1

Plnkr: http://plnkr.co/edit/yG8wAZHhgPtH2PBFzql3?p=preview

Угловой:

eventsApp = angular.module('EventsApp', ['ngRoute']) 


eventsApp.config [ 
    '$routeProvider' 
    '$locationProvider' 
    ($routeProvider, $locationProvider) -> 
     $locationProvider.html5Mode(true) 
     $routeProvider.when '/events/:eventName', 
      templateUrl: '../../views/events/events.html.erb' 
      controller: 'EventsCtrl'    
     return 
] 

eventsApp.controller('EventsCtrl', [ 
    '$scope' 
    '$routeParams' 
    ($scope, $routeParams) ->  
     console.log($routeParams.eventName) # shows up as undefined 
     $scope.greeting = $routeParams.eventName 
]) 

HTML:

events.html.erb

<div> 
     {{greeting}} 
    </div> 

application.html.erb (общая схема)

<div id="content" ng-app="EventsApp"> 
     <div ng-view></div> 
     <%= yield %> 
    </div> 

Edit: Как было предложено, я переехал ng-app и ng-view в макете и хранится только DIV внутри events.html.erb

+0

Постарайтесь, чтобы ваш контроллер работал нормально, выполнив регистрацию строки. Как только вы уверены, что это работает, вы можете отлаживать '$ routeParams' – geckob

ответ

2

Это потому, что вы включили контроллер с директивой ng-controller вместо ng-view. Должно быть так:

<body ng-app="EventsApp"> 
    <div ng-view></div> 
</body> 

В events.html.erb:

<div> 
    {{greeting}} 
</div> 
+0

. Я обновил свой пост тем, что, как я думаю, вы говорите - не могли бы вы взглянуть? – Andrew

+0

@Andrew no, '{{greeting}}' должно быть в частичном представлении. Итак, что делает 'ng-view'? он просматривает ваши маршруты и определяет, какой контроллер и представление должны быть загружены внутри элемента, который имеет 'ng-view' (в этом случае div). – karaxuna

+0

Когда я регистрирую $ routeParams, он просто появляется как пустой – Andrew

2

Если ошибки указываемые Karaxuna еще дает вам пустой результат, это может быть из-за асинхронной работы $routeParams

$routeParams обычно требуется некоторое время для загрузки. Он загружается асинхронно. Когда вы пытаетесь использовать его, он может быть не готов и все еще пуст. Один из подходов - создать прослушиватель событий, когда маршрут будет готов.

$scope.$on('$routeChangeSuccess', function() { 
    console.log($routeParams.eventName); 
}); 
+0

'$ routeParams' всегда готов при инъекции в контроллер – karaxuna

+0

Я пробовал, как вы и предполагали, он также появляется как пустой – Andrew

+0

Возможно ли предоставить вам plnkr? – geckob

Смежные вопросы