我正在开发一个带有RoR后端的AngularJS应用程序,并在使用多个布局时遇到问题。应用程序在将页面呈现给未经身份验证的用户时使用一种布局,并且在用户通过身份验证后更改为另一种布局。#!使用Angular/Rails与多个布局导致路由问题
布局是初始页面加载的服务器,由Rails管理。
class SampleController2 < ApplicationController
layout :current_layout
def current_layout
"anotherLayout" unless request.xhr?
end
end
这是用于控制器管理授权/非授权用户单独定义:对于不同的部
class SampleController < ApplicationController
layout :current_layout
def current_layout
"layout" unless request.xhr?
end
end
样品控制器:示出我们如何基于在路径上加载不同的布局一些示例代码,并基本提供适当的布局。当Angular进入画面时,我们使用XHR检查来防止路由循环。
因此,这在大多数浏览器中正常工作,但使用IE9时会中断。角落回到使用#!在IE9中的URL,所以Rails不知道要加载哪个控制器,因为哈希没有发送到后端。在这种情况下,Rails加载根和它的关联布局。如果认证部分设置为默认部分,那么即使对于未经认证的用户也会加载此布局,反之亦然。
所以基本上,我需要找到一种方法来使这个多布局应用程序正常工作,即使在不支持HTML5 pushState的浏览器中。我已经在这个地方检查了一个适当的解决方案,并且不能提出任何问题。
做这些选项的任何一个为你工作? 1.将布局放在AngularJS控件下(在Angular模板中)。 2.一些用户登录后,某些应用会更改其根用户的URL以呈现其他特定于用户的登录页面。这可能会解决您的问题,因为登录用户在登录用户登录时会得到与登录用户不同的布局根网址。 – colllin
@colllin ** 1。**根据我的研究,Angular目前还没有对多种布局提供适当的支持。我找到的最接近的东西是[Angular-UI Router](https://github.com/angular-ui/ui-router),但是无论如何这仍然会重新加载整个页面。 ** 2在完美的世界中,我可以完全控制它,但客户端不希望以任何方式更改根URL。 – godfrzero
我想出了一种方法,通过稍微调整后端来实现它。一旦我有足够的时间打印出来,我会将其作为答案发布。 – godfrzero