Javascript AngularJS和ui视图导致无限递归
我正在RubyonRails4上构建一个AngularJS应用程序。到目前为止,我只是拼凑了一些基本知识。下面是一个简单的配置/routes.rb:Javascript AngularJS和ui视图导致无限递归,javascript,ruby-on-rails,ruby,angularjs,angular-ui,Javascript,Ruby On Rails,Ruby,Angularjs,Angular Ui,我正在RubyonRails4上构建一个AngularJS应用程序。到目前为止,我只是拼凑了一些基本知识。下面是一个简单的配置/routes.rb: MyApp::Application.routes.draw do devise_for :users root :to => 'home#index' namespace :api do end get '*a', to: 'home#index' end 我有一个微不足道的application.html.
MyApp::Application.routes.draw do
devise_for :users
root :to => 'home#index'
namespace :api do
end
get '*a', to: 'home#index'
end
我有一个微不足道的application.html.erb
布局,它被标记为AngularJS,摘录如下:
<html ng-app="MyApp" ng-init="current_user = <%= current_user.to_json %>;">
现在,如果我不将任何标记放入app/views/home/index.html.erb
,就不存在无限递归问题。当我将其添加到应用程序中时,应用程序就完全爆炸了:
我不知道如何使用
ui视图
容器引导我的应用程序,以便AngularJS可以填充其余的模板。不完全确定是什么导致了这种无限递归。这是一个已知的问题吗?目前,Angularjs不支持多个ng view
指令
因此,正确的方法是将
放在根htmlapplication.html.erb
中,并且index.html.erb
将在根html模板的ui视图中呈现 只是有一个原因稍有不同的类似问题:我的routeProvider中缺少一个模板。但是.htaccess没有抛出错误,而是导致index.html被服务,导致无限递归。我遇到了一个类似的问题,但根本原因不同。对我来说,我通过设置$locationProvider.html5Mode(true)
启用了HTML5模式,同时在我的routes.rb中设置了一个catch-allget'*path',to:'application#index'
,其中application#index
与包含
元素的模板相同。以前,angular在URL中使用哈希标记命名路由,但在HTML5模式中不再如此,因此当ui视图试图从/
(以前是#/
)获取其模板时,由于获取“*a”,它被Rails覆盖,到:“home#index”
,因此整个初始Rails模板被重新加载到ui视图下
我使用angular rails模板,发现我仍然需要使用/assets/
,例如templateUrl:/assets/myTemplate.html
以templateUrl
s作为前缀,但是这个application.html.erb是由默认的Ruby on rails布局提供的,还是由AngularJS提供的模板?我不知道这是怎么回事。我所看到的示例应用程序都不是功能齐全的。Angularjs有独立的带路由的MVC。因此,您只需要一个“普通”web服务器。如果使用任何模板引擎,应该只让视图引擎呈现根html,对于其他部分页面,路由应该由纯angularjs处理。希望能有所帮助。但这正是Rails所服务的“根”html,在本例中是application.html.erb。这必须有标记,否则AngularJS将不知道如何使用它。无限循环是由AngularJS引起的,当你在一个分部中放入一个将在你的根html页面中呈现的。
MyApp.config(function($stateProvider, $urlRouterProvider){
$stateProvider
.state('login', {
url: '/login',
templateUrl: 'index.html.erb' })
// For any unmatched url
$urlRouterProvider.otherwise('/login');
});