2016-06-22 20 views
2

Ich kann nicht scheinen, Vue-Ressource mit Vueify zu arbeiten. Ich habe eine Vue-Komponente definiert, die ich in meine main.js-Datei einfüge.Vueify mit Vue-Ressource

import Vue from 'vue' 
import MyComponent from './my-component.vue' 

new Vue({ 
    el: '#app', 
    components: { 
     myComponent: MyComponent 
    } 
}); 

Meine vue Komponentendatei sieht wie folgt aus:

<script> 
    import Vue from 'vue'; 
    // import VueResource from 'vue-resource' 
    // Vue.use(VueResource); 

    export default { 
     template: '#my-component-template', 

     created:() => { 
      Vue.$http.get('/my/api/123', 
       data => { 
        console.log(data) 
       }, err => { 
        console.log("Error"); 
        console.error(err); 
       } 
      ); 
     } 
    } 
</script> 

Im aktuellen Zustand, ich diese Fehlermeldung:

Uncaught TypeError: Cannot read property 'get' of undefined 

Wenn ich die beiden Zeilen auf Kommentar über vue -resource in meiner Komponentendatei, der Fehler, den ich erhalte, dreht sich wie folgt:

Uncaught TypeError: Cannot redefine property: $url 

package.json:

{ 
    "private": true, 
    "scripts": { 
    "prod": "gulp --production", 
    "dev": "gulp watch" 
    }, 
    "devDependencies": { 
    "bootstrap-sass": "^3.3.6", 
    "gulp": "^3.9.1", 
    "laravel-elixir": "^5.0.0", 
    "laravel-elixir-vueify": "^1.0.3", 
    "vue": "^1.0.25", 
    "vue-resource": "^0.8.0" 
    } 
} 

Gulpfile:

var elixir = require('laravel-elixir'); 
require('laravel-elixir-vueify'); 

elixir(function(mix) { 
    mix.browserify('main.js'); 
}); 

Alle bestehenden Antworten auf SO keine Ergebnisse gebracht haben. Bitte helfen Sie.

+0

Bekommst du immer noch den Fehler, wenn Sie uncomment Vue.use (VueResource); ? – Frisbetarian

+0

Danke für Ihre Antwort. Ja, ich erhalte: 'Uncaught TypeError: Die Eigenschaft 'get' von undefined kann nicht gelesen werden – user2968356

+0

Der neu definierte Fehler tritt normalerweise auf, weil Sie vue-resource zweimal in Ihrer App enthalten haben. Importieren Sie zufällig Ihre Vue-Ressource-Datei mit Elixier sowie mit Npm? Vielleicht solltest du dies auf GitHub setzen, wenn du wirklich Probleme hast, damit wir einen Blick darauf werfen können. –

Antwort

1

Sobald Sie das Plugin unter main.js mit Vue.use(VueResource) hinzugefügt haben, fügt es allen Vue-Instanzen das Attribut $http hinzu. Sie müssen es in Ihrer Komponentendatei nicht erneut durchführen. Dann nutzen Sie einfach this.$http:

created:() => { 
     this.$http.get('/my/api/123', 
      //... 
     ); 
    } 
+0

Danke für Ihre Antwort. Leider gibt dies auch den Fehler 'Uncaught TypeError: Eigenschaft kann nicht neu definiert werden: $ url' – user2968356

3

haben Sie versucht var VueResource = require('vue-resource'); in Ihrem Root-vue-Instanz hinzufügen? fügen Sie auch Vue.use(VueResource) hinzu.

4

sollten Sie ersetzen die $http mit http:

import Vue from 'vue' 
import VueResource from 'vue-resource' 

Vue.use(VueResource) 

export default { 
    created:() => { 
    Vue.http.get(...) 
    } 
} 

Außerdem ist es eine gute Praxis, die VueResource in die main-Datei zu installieren und dann könnten wir die this Schlüsselwort wie @ Jeff sagte.

Um das zu erreichen, sollten Sie die arrow function ändern, weil this auf das globale Objekt verweist:

// refers to the global object 
created:() => {} 

// refers to the Vue component 
created() { 
    this.$http.get(...) 
} 
+0

Netter Hinweis auf das globale Objekt und die' this' Bindung, danke –

+0

Die Änderung von '$ http' zu' http' löste das Problem nicht. Aber das Ändern der Pfeilfunktionen hat den Trick gemacht. Ich hatte auch ein übrig gebliebenes Skript-Tag in meiner Layout-Datei, die Vue-Ressource enthalten. – user2968356

+0

Um die 'Vue zu arbeiten.http 'Sie sollten die Vue wie beschrieben in die Frage importieren und die VueResource richtig einstellen. –

Verwandte Themen