【问题标题】:sinatra + angular.js + load templatesinatra + angular.js + 加载模板
【发布时间】:2013-12-26 05:08:18
【问题描述】:

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

index.erb、a.html 和 b.html 在 vi​​ews 文件夹中。

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:'/'
          });
    });

【问题讨论】:

    标签: javascript html angularjs sinatra


    【解决方案1】:

    您尚未在您的 sinatra 应用程序中为您的 erb 模板提供任何路由。因此,当您导航到 hostname/a.html 时,没有可用的文件。请记住 Angular 正在尝试访问 http://hostname/a.html 以获取您的 html sn-p,如果 sinatra 不知道如何提供它,那么您就被卡住了。

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

    试试这个。它将允许您通过您的服务器地址/filename 访问您的html sn-ps。因此,要获取您的a.html sn-p,定义此路由后,您可以访问http://server/a

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

    【讨论】:

    • 将文件移动到静态焊料可以解决问题,但我一直在寻找这样的解决方案。谢谢
    【解决方案2】:

    解决了,

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

    我不知道这是一种不好的做法还是有更好的方法,如果有,请随时发表评论。

    【讨论】:

    • 您从未为您的 sinatra 应用程序提供任何通往您的视图的路径。您必须明确路由来自/a.html 的请求以处理views 文件夹中的a.erb 文件,仅将它们放在文件夹中是不够的。所做的只是通过它的名称作为符号使其可用于编译,即erb :a。在那之前,Angular 永远无法访问那些 html 模板文件。
    猜你喜欢
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多