2016-04-09 23 views
1

我想有条件地呈现一些标签在我<head>作为纯文本玉条件语句

下面的代码:

<!doctype html> 
    <html ng-app='nodeApp'> 

    <head> 
     if (title) 
      <title>#{title}</title> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <meta charset="UTF-8"> 
     <meta name='author' content='#{author}'> 
     <meta name='og:title' content='#{title}'> 
     <meta name='description' content='#{description}'> 
     <meta name='og:description' content='#{description}'> 
     <meta name='og:image' content='#{image}'> 
     <meta name="theme-color" content="#3F51B5"> 
     <!-- CSS files are inserted here --> 
     <link rel="stylesheet" href="/static/client.css" type="text/css"> 
    </head> 

当我去我的网页中的文字:“如果(标题)”在页面顶部以纯文本呈现。这发生在所有的条件中。但是,标题标签是用正确的文本呈现的。

我也曾尝试

if title 
      <title>#{title}</title> 

if (title) { 
      <title>#{title}</title> 
} 
在我的后端我有(整个班级)

..

const jade = require('jade'); 
this.locals = { 
       title: process.env.sitename 
      }; 
this.header = jade.render(this.header, this.locals); 

所以网站名称正确返回,因为标题得到填充,但if语句不做任何事情,只是呈现为纯文本。思考?

+1

我无法重现这一点。一般验证:'require('jade')。render('if title \ n #{title}',{title:'test'})',它返回期望的字符串:'' test'' – lxe

+0

@Ixe我添加了更多的上下文,看看是否有助于 – Justin

+0

增加了模板,我得到以下错误: ' 错误:./file.template:2 1 | <!doctype html> > 2 | 3 | 4 | 5 |如果(标题) 意外令牌“缩进” ' – lxe

回答

0

您必须为javascript语句(如here)预设一个连字符。

- var title = true; 

- if (title) { 
    h1(title='#{title}') My Title 
- } 
+1

不是根据他们的文档? “Jade的一流条件语法允许使用可选的括号,现在您可以省略前导 - 否则它是相同的,仍然只是常规的javascript:” – Justin

+0

我试图确定它并没有解决问题。 – Justin

+1

酷! @Justin感谢你的信息。 –

1

我认为这个问题可能是你正在用普通的html写翡翠。 由于您正在使用常规的html标签进行书写,因此if语句已经是一个孩子了。但是,你也使用缩进,它变成了双缩进,Jade变得困惑。 if语句之前没有压痕 试试这个:

<head> 
if (title) 
    <title>#{title}</title> 

或者更好。始终如一地使用Jade。

+0

感谢您的评论,我会试试这个。我希望只使用翡翠的变量,因为我不喜欢的语法和我的网站已经写在正常的HTML。我目前正在寻找其他可能对我更好的选项。 – Justin