ng-view不能在AngularJS / Express中使用partials

一切正常,直到我试图在ng-view中显示一个部分文件。

/public/app/app.js

angular.module('app', ['ngResource', 'ngRoute']); angular.module('app').config(function($routeProvider,$locationProvider){ $locationProvider.html5Mode(true); $routeProvider .when('/', {templateUrl: '/partials/main', controller: 'mainCtrl'}); }); angular.module('app').controller('mainCtrl', function($scope){ $scope.myVar = "Hello Angular"; }); 

/server/includes/layout.jade

 doctype html 5 html head link(rel="stylesheet", href="/css/bootstrap.css") link(rel="stylesheet", href="/vendor/toastr/toastr.css") link(rel="stylesheet", href="/css/site.css") body(ng-app="app") block main-content include scripts 

/server/includes/scripts.jade (版本号不在脚本中)

 script(type="text/javascript", src="/vendor/jquery/jquery.js") 2.1.0 script(type="text/javascript", src="/vendor/angular/angular.js") 1.2.16 script(type="text/javascript", src="/vendor/angular-resource/angular-resource.js") script(type="text/javascript", src="/vendor/angular-route/angular-route.js") script(type="text/javascript", src="/app/app.js") 

/views/index.jade

 extends ../includes/layout block main-content section.content div(ng-view) 

/views/partials/main.jade

 h1 This a Partial h2 {{ myVar }} 

最后是server.js

 var express = require('express'), stylus = require('stylus'); var env = process.env.NODE_ENV = process.env.NODE_ENV || 'development'; var app = express(); function compile(str, path){ return stylus(str).set('filename', path) } app.configure(function (){ app.set('views', __dirname + '/server/views'); app.set('view engine', 'jade'); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(stylus.middleware( { src: __dirname + '/public', compile: compile } )); app.use(express.static (__dirname + '/public')); }); app.get('/partials/:partialPath', function (req, res){ res.render('partials/' + req.params.partialPath); }) app.get('*', function(req, res) { res.render('index'); }); var port = 3030; app.listen(port); console.log('Listening on port' + port + '…'); 

目录结构: 网站的结构

当我启动“node server.js”并转到“localhost:3030”时,我得到一个空白页面,而不是“This is a Partial Hello Angular”与这个HTML:

 <!DOCTYPE html 5> <html> <head> <link rel="stylesheet" href="/css/bootstrap.css"/> <link rel="stylesheet" href="/vendor/toastr/toastr.css"/> <link rel="stylesheet" href="/css/site.css"/></head> <body ng-app="app"> <section class="content"> <div ng-view="ng-view"></div> </section> <script type="text/javascript" src="/vendor/jquery/jquery.js"></script> <script type="text/javascript" src="/vendor/angular/angular.js"></script> <script type="text/javascript" src="/vendor/angular-resource/angular-resource.js"></script> <script type="text/javascript" src="/vendor/angular-route/angular-route.js"></script> <script type="text/javascript" src="/app/app.js"></script></body></html> 

在教程中,这个configuration完美地工作,但是当我运行它时,ng-view是空的。 任何想法为什么?


编辑:

Node.js像魅力一样运行。 事情一定会改变,或者我忘了一些东西。 在教程中,所有的东西都像我一样安装了bower,并且javascript,hrefs指向/ vendor /在公共目录中,它看起来像是工作。

当我查看Javascript控制台时,我得到了所有脚本的错误消息: SyntaxError: Unexpected token '<' ,其中<是HTTP错误消息的开头。

所以我把错误的所有被调用的文件复制到/供应商/更改像“/vendor/jquery/jquery.js”的“/服务器/包括/ scripts.jade”中的URL“供应商/ jquery.js”,它的工作。

但我觉得我应用了一个补丁。 随着凉亭,不应该与以前的设置?

不知道这将有多大的帮助,但我注意到所有的凉亭包在'bower_components'目录。 这是凉亭的默认设置,除非您指定另一个目录。 因此,如果您想要安装凉亭组件,请说明“/ public / vendor”,请执行以下操作:

1)创build一个名为“.bowerrc”的文件,并将其保存在根目录即。 与gitignore,bower.json等

2)在文件中放:

 { "directory": "public/vendor" } 

这将加载你想要的凉亭组件。 文件'.bowerrc'是bower的configuration文件,你可以在http://bower.io/find指导&#x3002;

HTH

Thers是在你的app.js文件中。 用这个replace它,你应该很好去:

 var app = angular.module('app', ['ngResource', 'ngRoute']); angular.module('app').config(function($routeProvider, $locationProvider){ $locationProvider.html5Mode(true); $routeProvider .when('/', { templateUrl: '/partials/main', controller: 'mainCtrl'}); }); angular.module('app').controller('mainCtrl', function($scope){ $scope.myVar = "Hello Angular"; }); 
  app.get('*', function(req, res,next) { if(req.xhr != true) { res.render('index'); } else { next(); } }); 

像这样修改