1

我正在Ruby on Rails 4 之上构建一个AngularJS 应用程序。到目前为止,我只是拼凑了基础知识。这是一个简单的 config/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.erb布局,它被标记为 AngularJS 并带有以下摘录:

<html ng-app="MyApp" ng-init="current_user = <%= current_user.to_json %>;">

在 Angular 方面,我使用 ui-router 进行了简单的路由设置:

MyApp.config(function($stateProvider, $urlRouterProvider){

      $stateProvider
        .state('login', {
                url: '/login',
                templateUrl: 'index.html.erb' })


      // For any unmatched url
      $urlRouterProvider.otherwise('/login');
});

现在,如果我不将任何标记放入app/views/home/index.html.erb中,则不存在无限递归问题。我将其添加到其中的那一刻,该应用程序就完全爆炸了:

<div ui-view></div>

我不确定如何使用ui-view容器引导我的应用程序,以便 AngularJS 可以填充模板的其余部分。不完全确定是什么导致了这种无限递归。这是一个已知的问题?

4

3 回答 3

1

目前,Angularjs 不支持多个ng-view指令。

所以正确的做法是放在<div ui-view></div>根 htmlapplication.html.erb中,并且index.html.erb会在ui-view根 html 模板中渲染。

于 2013-07-30T04:01:43.163 回答
1

只是有一个类似的问题,原因略有不同:我的 routeProvider 中缺少模板。但是 .htaccess 并没有引发错误,而是导致 index.html 被提供,从而导致无限递归。

于 2014-01-10T14:39:06.267 回答
0

我有一个类似的问题,但根本原因不同。对我来说,我通过设置启用了 HTML5 模式,$locationProvider.html5Mode(true)同时还在get '*path', to: 'application#index'我的 routes.rb 中设置了一个包罗万象的内容,其中application#index包含我的<div ui-view></div>元素的同一个模板。以前,angular 是用标签在 URL 中命名空间路由,但在 html 5 模式下不再是这种情况,所以当 ui-view 尝试从/(以前#/)获取其模板时,它被 Rails 覆盖,原因是get '*a', to: 'home#index'和所以整个初始 Rails 模板在 ui-view 下重新加载。

我正在使用 angular-rails-templates,发现我仍然需要在templateUrls 前加上 s前缀/assets/,例如templateUrl: /assets/myTemplate.html

于 2015-05-11T05:36:27.750 回答