Rails在AngularJS中路由参数

时间:2014-01-10 15:49:25

标签: ruby-on-rails angularjs

我正在尝试构建一个AngularJS / Rails多页面应用程序而不使用ngView-基本上,我想在我的rails应用程序中使用Angular的数据绑定和其他功能,同时仍然拥有由我的Rails路由确定的视图。到目前为止,它工作正常,但我的主要问题是从我的Angular框架中访问我的rails路由参数。有没有办法以Angular友好的方式访问URL /参数?我不想诉诸于window.location。

例如,假设我在localhost:3000 / articles / 1,我的视图将对应app / views / article / show.html.erb

<div class='articleContainer' ng-controller='ArticleController'>
  <div class='articleTitle' ng-bind='article.title'></div>
  <div class='articleBody' ng-bind='article.body'></div>
</div>

这是我的ArticleController在传统的Angular设置中的样子。

var ArticlesControllers = angular.module('ArticlesControllers', ['ngSanitize']);

ArticlesControllers.controller('ArticleController', ['$scope', '$routeParams',"$http","$browser","$sniffer","$rootElement", "$location",
  function($scope, $location, $http, $resource){
    $http.get('/articles/'+$routeParams.articleId+'.json').success(function(data) {
      $scope.article = data["article"];
      $scope.comments = data["comments"];
    });

  }
]);

不幸的是,如果我没有使用ngView,$ routeParams似乎不起作用。有没有一种干净的方法来重新创建$ routeParams.articleId而不诉诸window.location?谢谢你。

1 个答案:

答案 0 :(得分:0)

将article id嵌入到articleContainer div的数据元素中,如下所示:

<div class='articleContainer' ng-controller='ArticleController' id='articleContainer' data-article-id=<% =@article.id.to_s %> >
  <div class='articleTitle' ng-bind='article.title'></div>
  <div class='articleBody' ng-bind='article.body'></div>
</div>

我在div中添加了一个id,以便通过javascript轻松引用。

然后,在您的javascript中,在您需要时检索该数据元素:

(假设jQuery)

var articleId = $('#articleContainer').data('article-id');