Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Conflict on Template of Twig and Vue.js

I'm doing a program using Slim 2 that uses Twig as my templating engine. so It uses the syntax {{ foo }} in php file. On the other hand, I'm using vue.js, it also uses {{ bar }}.

E.g.

I'm gonna do the two way binding, below is my html code.

<div class="container">     Label Value: <label>{{ foo }}</label><br>     Field Value: <input v-model="foo"> </div> 

and here is my vue js code.

new Vue({      el: '.container',     data: {         foo: 'Hello world.'     } }); 

So the Hello world should be in the Label Value.

The output is the image below.

enter image description here

Which it did not worked, probably the system thought it's a twig variable. So I checked by passing variable in a view.

$app->get('/', function() use ($app) {     $app->render('login.php', [         'foo' => 'FROM PHP FILE'     ]); })->name('login'); 

So I checked, the Label Value: shows the variable that I passed from the PHP file not on the VUE code.

Kind of hard to explain but you get the point. Was wondering how to bypass twig's template and use the {{ }} from vue also.

enter image description here

like image 576
Wesley Brian Lachenal Avatar asked Jul 17 '15 16:07

Wesley Brian Lachenal


People also ask

How can you prevent layout jumps in Vue JS?

Use single file components if you can. If you come from React you can also find jsx for Vue useful, or even write render function by hand (though not recommended). If you want to totally nullify the time of the first rendering though, the only way to go is to do server-side rendering.

What does template do in Vue?

Vue uses an HTML-based template syntax that allows you to declaratively bind the rendered DOM to the underlying component instance's data. All Vue templates are syntactically valid HTML that can be parsed by spec-compliant browsers and HTML parsers.

Is Vue a templating engine?

The templating language is tightly coupled into Vue. js. Like many other templating engines, it uses double curly braces {{ }} to bind data to your template. That means the information in our data variable we pass after our new Vue statement is immediately available inside our application.


1 Answers

Just change default delimiters for vue. Here's how:

Vue.js 1.0

Define delimiters globally (docs).

Vue.config.delimiters = ['${', '}'] 

Vue.js 2.0

Define delimiters for component (docs).

new Vue({   delimiters: ['${', '}'] }) 

Vue.js 3.0

Define delimiters for application (docs).

Vue.createApp({   delimiters: ['${', '}'] }) 
like image 78
Yauheni Prakopchyk Avatar answered Sep 30 '22 23:09

Yauheni Prakopchyk