sinatra + angular.js +加载模板

时间:2013-12-25 16:15:21

标签: javascript html angularjs sinatra

我正在使用angular.js在一个简单的sinatra应用程序中获取this behaviour,角度工作,但它不会加载我的a.html和b.html模板。我也尝试在main.js中使用a.erbviews/a.html,但它什么也没做。它有什么问题?

index.erb,a.html和b.html位于views文件夹中。

app.rb

require 'sinatra'

class app < Sinatra::Base
    set :public, File.dirname(__FILE__) + '/static'
    get '/' do
        erb :index
    end
end
app.run!

index.erb

<span><a href="/">A</a></span> <span><a href="#/b">B</a></span>

main.js

var mymain = angular.module('main', ['ngRoute']);

mymain.config(
    function($routeProvider) {
        $routeProvider
          .when('/', {
              templateUrl: 'a.html',
              controller: 'F1'
           })
         .when('/b', {
          templateUrl: 'b.html',
          controller: 'F2'
           })
         .otherwise({
              redirectTo:'/'
          });
    });

2 个答案:

答案 0 :(得分:3)

您尚未在sinatra应用中为您的erb模板提供任何路线。因此,当您导航到hostname/a.html时,就没有可用的文件。记住angular正试图访问http://hostname/a.html来获取你的html片段,如果sinatra不知道如何服务它,那么你就会被卡住。

get '/partials/:name' do
  erb params[:name].to_sym, layout: false
end

试试这个。它允许您通过服务器地址/filename访问您的html代码段。因此,要获取定义此路线的a.html代码段,您可以访问http://server/a

将文件移动到静态文件夹只意味着sinatra会自动将请求映射到静态文件夹位置。静态提供的文件优先于您可能映射的任何其他路由,并且通常由系统默认值(如apache)推送。

答案 1 :(得分:0)

解决,

刚刚将a.html和b.html移至静态文件夹

我不知道这是不好的做法,还是有更好的方法,如果有的话随意发表评论。