我正在使用angular.js在一个简单的sinatra应用程序中获取this behaviour,角度工作,但它不会加载我的a.html和b.html模板。我也尝试在main.js中使用a.erb
和views/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:'/'
});
});
答案 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移至静态文件夹。
我不知道这是不好的做法,还是有更好的方法,如果有的话随意发表评论。