ruby-on-rails – 如何在Rails / Angularjs html5模式中删除重定向

在使用带有rails的html 5模式时,如何在每次用户刷新 angularjs页面时避免性能下降?我正在使用 Angularjs html5模式 Ruby on Rails路由重定向.通过我的设置,如果我访问http:// localhost:3000 / users,则url立即变为http:// localhost:3000 /?goto = users,然后重定向到http:// localhost:3000 / users.使用html5模式时,我该怎么做才能避免这种性质的重定向

Rails路由

myApp::Application.routes.draw do
 namespace :api,defaults: {format: :json} do
   namespace :v1 do
    resources :users
   end
 end

# Re-route all angular requests to the angular router
get "/*path" => redirect("/?goto=%{path}")
root to: 'application#home'

结束

角度路线

myApp.config(function($routeProvider,$locationProvider,$httpProvider) {
    $httpProvider.defaults.headers.common['X-CSRF-Token'] = 
    $('Meta[name=csrf-token]').attr('content');
    $routeProvider.
        when('/',{
            templateUrl: '../assets/mainIndex.html',controller: 'MainController',redirectTo:
                function(current,path,search){
                  if(search.goto){
                    // if we were passed in a search param,and it has a path
                    // to redirect to,then redirect to that path
                    return "/" + search.goto;
                  }
                  else{
                    // else just redirect back to this location
                    // angular is smart enough to only do this once.
                    return "/";
                  }
                }
        }).when('/users',{
            templateUrl: '../assets/users/userIndex.html',controller: 'UsersController'
        }).otherwise({
            redirectTo:'/'
        });
    $locationProvider.html5Mode(true);
});

以上内容来自这篇博客http://omarriott.com/aux/angularjs-html5-routing-rails/

解决方法

只需使用此rails路线:

# Route all valid requests to AngularJS
  root to: 'application#home'
  get "*path" => "application#home"

和rails action_controller:

# We'll just use this as a launch point for our App
  def home
    # Render just the layout since this application is Angular driven
    # our layout/application has all the angular logic and our controllers
    # have no views for themselves. We just need a place to launch from
    # and this happens to be it. So we have no view (thus :nothing => true)
    # but we still want the layout (since it has the App bootstrap code)
    render :layout => 'application',:nothing => true
  end

现在不需要处理angularjs路由器的重定向.只需为您的网页制作普通路线即可.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...