2017-01-31 4 views
1

Ich habe 1 2 KomponenteWie kann ich Laravels Baseurl auf dem vue.js 2 verwenden?

Komponente, Der Name wie diese SearchResultVue.vue Komponente

Die Komponente ist:

<template> 
    ... 
     <span class="pull-right" v-show="totalall>8"> 
      <pagination :data="list" :baseUrl="this.Laravel.baseUrl" :total="totalPage" :nextPage="nextPage" :prevPage="prevPage"></pagination> 
     </span> 
    ... 
</template> 

Die Komponente Aufruf Komponente 2. Der Name ist Pagination.vue Komponente

Die Paginierung Komponente ist wie folgt:

<template> 
    <nav aria-label="Page navigation"> 
     <ul class="pagination"> 
      <li> 
       <a :href="prevPage" aria-label="Previous"> 
        <span aria-hidden="true">&laquo;</span> 
       </a> 
      </li> 
      <li v-for="i in total"> 
       <a :href="baseUrl+'/search-result?page='+i">{{i}}</a> 
      </li> 
      <li> 
       <a :href="nextPage" aria-label="Next"> 
        <span aria-hidden="true">&raquo;</span> 
       </a> 
      </li> 
     </ul> 
    </nav> 
</template> 
<script> 
    export default{ 
     props:['total', 'data', 'nextPage', 'prevPage'], 
     computed:{ 
      baseUrl(){ 
       return window.Laravel.baseUrl 
      } 
     } 
    } 
</script> 

Wenn er ausgeführt wird, in der Konsole existieren 2 Fehler

Fehler 1 ist wie folgt:

[Vue warn]: Property or method "Laravel" is not defined on the instance but referenced during render. Make sure to declare reactive data properties in the data option.

Fehler 2 ist wie folgt:

Uncaught TypeError: Cannot read property 'baseUrl' of undefined

Wie kann ich die Fehler lösen?

+0

Sie können nicht Laravel Variablen aus VueJS zugreifen. Es ist sowieso nicht definiert in "Fenster" ... –

+0

@M U, Was ist dann die richtige Lösung für mein Problem? –

+0

Warum brauchen Sie baseurl? Es ist env-Variable, also kannst du es in deiner Webpack-Konfiguration einstellen und es so benutzen? –

Antwort

2

Sie müssen das an window anhängen. Ich denke, die Verwirrung kommt, weil Laravel die csrf_token verfügbar über Laravel.csrfToken macht aber zu tun, dass es die folgenden in der header platziert:

window.Laravel = <?php echo json_encode([ 
      'csrfToken' => csrf_token(), 
    ]); ?> 

Ich persönlich mag es nicht php mit javascript mischen, aber wenn Sie wirklich wollen fügen Sie die baseurl mit Ihrem globalen Laravel Objekt, könnten Sie einfach tun:

window.Laravel = <?php echo json_encode([ 
      'csrfToken' => csrf_token(), 
      'baseUrl' => base_url() 
    ]); ?> 

die JSFiddle hier: https://jsfiddle.net/w6szt02q/

+0

Scheint du vue.js zu meistern. Ich brauche deine Hilfe. Schau dir das an: http://stackoverflow.com/questions/41952393/why-pagination-links-returns-json-when-clicked-vue-js-2. Vielleicht kannst du mir helfen –

1
  1. Legen Sie env-Variablen in Ihrer Webpack-Konfiguration fest.

    module.exports = { NODE_ENV: ' "Herstellung"', BASE_URL: ‚“ http://myshop.ct-staging.tk ‚“ }

    // config/dev.env.js module.exports = merge (prodEnv {: ' "Entwicklung"', BASE_URL: NODE_ENV ' "http://myshop.dev/"' // dies überschreibt den BASE_URL Wert von prod.env })

  2. es in Ihrem Vue App verwenden. Vue.config.baseurl = process.env.BASE_URL

+0

@MU, wo kann ich meine Webpack-Konfiguration einstellen? –

+0

/project/config wenn Sie webpack vue template –

+0

@M U verwenden, ist mein '/ project/config' wie folgt: https://postimg.org/image/y5hfca1i9/. Scheint, ich benutze nicht webpack vue template –

Verwandte Themen