Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using express handlebars with vue js

I am building an app using express handlebars for server-side templating. On the client side, I want to use vue.js. However, they both share the same double brace notation {{ variable }}. Right now, my vue.js variables are not showing because my handlebars template is overriding it. For example:

home.html:

<div id="app">
   {{message}} //this will not show up
</div> 

home.js:

new Vue({
    el: '#app',
    data: {
        message: 'Hello Vue.js!'
    }
});

HOWEVER, if I define message in my server side controller:

res.render('../views/home', {
    message: 'message from handlebars'
});

the message will show up.

So in summary, is there a way i can use vue.js for client side templating while still using express-handlebars for server side templating?

Thanks in advance!

like image 483
Trung Tran Avatar asked Apr 10 '16 13:04

Trung Tran


People also ask

How do I connect Express handlebars?

To use handlebars in express, we need to store HTML code into a . hbs extension in the 'views' folder in the source directory as hbs looks for the pages in the views folder. Now, we need to change the default view engine. Now, we render our webpage through express to the local server.

How do I use Vue handlebars in JavaScript?

To combine handlebars and Vue. js syntax templates, you need to escape the templates that Vue. js should pick up. All syntax templates prefixed with a backslash will be ignored by handlebars and left within the template.

Can you use handlebars in JavaScript?

Handlebars. js is a Javascript library used to create reusable webpage templates. The templates are combination of HTML, text, and expressions. The expressions are included in the html document and surrounded by double curly braces.


1 Answers

This can be solved by escaping the first brace in your handlebars template.

<div id="app">
   \{{message}} //this will not be replaced by handlebars
</div>
like image 186
Tony Mottaz Avatar answered Oct 14 '22 20:10

Tony Mottaz