【问题标题】:Angular-ui router loading jade templateAngular-ui路由器加载jade模板
【发布时间】:2014-07-22 06:32:51
【问题描述】:

我正在尝试将 Express 与 Angular 尤其是 Angular-UI 路由器结合使用并使用 Jade: 我的 index.jade 看起来像这样:

doctype html
html(lang="en")
    head
        meta(charset='UTF-8')
        meta(name='fragment', content='!')
        base(href='/')
        title Node Express Angular Example
        meta(name='viewport', content='width=device-width, initial-scale=1.0')
        link(rel='stylesheet', href='//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css')
        link(rel='stylesheet', href='./css/style.css')
    body(style='', ng-app='myApp', ng-cloak)
        include partials/header
        div(ui-view)

        script(src='//code.jquery.com/jquery-2.1.1.min.js')
        script(src='//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js')
        script(src='https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js')
        script(src='http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.10/angular-ui-router.min.js')
        script(src='https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular-sanitize.js')
        script(src='./js/app.js')

我的 app.js 看起来像这样:

var myApp = angular.module('myApp', ['ui.router']);

myApp.config(['$stateProvider','$urlRouterProvider','$locationProvider', 
    function ($stateProvider,$urlRouterProvider,$locationProvider) {
    $stateProvider
        .state('home', {
            url:'/home',
            templateUrl: './partials/partial-home.jade'
        })
        .state('about', {
            url:'/about',
            template: 'This is the about page'
        });
    $urlRouterProvider.otherwise('/home');
    $locationProvider
    .html5Mode(true)
    .hashPrefix('!');
}]);

而我的 partial-home.jade 看起来像这样:

div.jumbotron
    div.container.text-center
        h1 Home Page
        p This page is a draft in progress

查看“关于”页面没有问题,但无法查看主页。 我还尝试在 index.jade 中将 div(ui-view) 替换为 <div ui-view></div>,正如其他一些 SO 帖子中所建议的那样,但没有效果。有什么线索吗?

编辑:app.js 中有一个拼写错误,它是 templateUrl 而不是 templateURL。但是它仍然没有渲染正确的 partial-home.jade,ui-view 中的内容实际上与 index.jade 相同。我的 server.js 看起来像这样:

var express = require('express');
var app = express();
var port = process.env.PORT || 8080;
var favicon = require('serve-favicon');
var path = require('path');

app.set('views', __dirname+'/client/views');
app.set('view engine', 'jade');
app.use(express.static(path.join(__dirname, 'client')));

app.get("/*", function (req, res) {
    console.log(req.url + req.method);
    res.render('index');    
});

app.listen(port, function () {
    console.log('Express Server listening on ' + port);
});

【问题讨论】:

  • 我觉得这个应该在服务器端配置。如果我没有完全弄错的话,应该是服务器端呈现翡翠模板。服务端下发翡翠模板的时候应该渲染对吗?
  • 在加载./partials/partial-home.jade 模板时查看浏览器开发人员工具网络选项卡中的响应。它是真的呈现 HTML 还是仍然是原始的玉语法?
  • 我发现我的第一个错误是拼写错误:应该是 templateUrl 而不是 templateURL。现在似乎它在ui-view中重新加载了整个index.jade,但仍然没有使用partial-home.jade,我相信这是由于Express中定义的服务器端路由,将相应地修改我的问题。
  • @PeterLyons for the ./partials/partial-home.jade 我的状态为 200,响应为 html 但响应看起来像 index.jade 而不是 partial-home.jade

标签: angularjs express pug angular-ui-router


【解决方案1】:

我的 2 美分: 为什么必须让服务器呈现页面? 如果原因是您需要在初始加载时传递数据(在某处像 JSON 字符串一样思考,something like this),我会在引导时进行(a follow up from the same author on how to go about that)。

除了这个原因,我真的想不出任何其他理由让服务器进行渲染。在 webpack 中使用 gulp 或更好的方式编译您的翡翠模板(用于登录页面的 HTMLWebpack 插件很好)。

【讨论】:

    【解决方案2】:

    Right so express 不会自动呈现视图。它会自动发送静态文件,但不会渲染动态视图,因此您需要一个显式路由来匹配部分并调用res.render 将它们从jade 转换为HTML,然后再发送到浏览器。尝试按照这些思路进行操作,将其放在 index 的通配符路由之前。

    app.use("/partials", function (req, res) {
      res.render(req.path);
    });
    

    【讨论】:

    • 我的代码中似乎有几处错误:
    • 我已经尝试过您的解决方案,但它不能正常工作,也许我不知道以正确的方式去做。我的代码中似乎有几处错误。 1) 最初是 $urlRouterProvider.otherwise('/home');在我的 app.js 中的 $stateProvider 之前触发了某种无限循环 2)一旦我使用 Angular 路由系统,我就无法提供 Jade 模板,因此 $stateProvider 中的 templateUrls 必须是 html 模板。我仍然很困惑如何最好地结合使用 Express 定义的路由和 AngularJs 中定义的路由(我不得不重新评论,因为 SO 不允许我编辑超过 500 万)
    • ui-route with jam仍然存在问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    相关资源
    最近更新 更多