2017-01-21 1 views
0

Ich lerne VueJS 2.0 und ich bin eine Verbindung zu einer API, wo ich möchte, dass der Wert einiger Daten bei Eingabe ändern. Hier ist, was die Ausgabe sagt die Entwickler-Tools:VueJS api Anruf Daten verlassen undefined

canadianDollar:undefined europeanEuro:undefined europeanPound:undefined usd:"1232"

Immer, wenn ich 1232 setzte im USD Eingabefeld es nichts zurückliefert und verlassen diese Eigenschaften als nicht definiert. Hier ist der Code.

new Vue({ 
    el: '#app', 
    data: { 
    usd: '', 
    canadianDollar: '', 
    europeanPound: '', 
    europeanEuro: '' 
    }, 

    // Watch methods 
    watch: { 
     usd: function() { 
      this.convertCurrency() 
     } 
    }, 

    // Logic Methods 
    methods: { 
    convertCurrency: _.debounce(function() { 
     var app = this; 
     if (app.usd.length !== 0) { 

      // Show that the things are loading in. 
      app.canadianDollar = 'Searching...' 
      app.europeanPound = 'Searching...' 
      app.europeanEuro = 'Searching...' 
      console.log(app.usd) 
      axios.get("http://api.fixer.io/latest?base=USD&" + app.usd) 
       .then(function(response) { 
        app.canadianDollar = response.data.CAD 
        app.europeanPound = response.data.GBP 
        app.europeanEuro = response.data.EUR 
       }) 
       .catch(function(error){ 
        app.canadianDollar = "ERROR" 
        app.europeanPound = "ERROR" 
        app.europeanEuro = "ERROR" 
       }) 
     } 
    }, 500) 
    } 
}) 

und die HTML:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Welcome to Vue</title> 
    <script src="https://unpkg.com/vue/dist/vue.js"></script> 
</head> 
<body> 
    <div id="app"> 
    <input type="text" name="" value="" v-model="usd"> 
    <ul> 
     <li>Canadian Dollar: {{canadianDollar}}</li> 
     <li>European Pound: {{europeanPound}}</li> 
     <li>European Euro: {{europeanEuro}}</li> 
    </ul> 
    </div> 
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script> 
    <script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js" charset="utf-8"></script> 
    <script src="index.js" charset="utf-8"></script> 
</body> 
</html> 

Wenn ich in einer Reihe geben Sie es mir nicht geben den „Suche“ Teil aber verschwindet und nichts auftaucht.

Antwort

1

Ich empfehle

Wechsel würde
then(function(response) { 
    app.canadianDollar = response.data.CAD 
    app.europeanPound = response.data.GBP 
    app.europeanEuro = response.data.EUR 
}) 

bis

then(function(response) { 
    console.log(response); 
}) 

das war, was Sie zurückgeben können.

Auch axios.get("http://api.fixer.io/latest?base=USD&" + app.usd) sollte wahrscheinlich einen Namen wie vulue haben: axios.get("http://api.fixer.io/latest?base=USD&VALUE=" + app.usd), aber Sie müssen ihre API überprüfen, um zu sehen, wie es heißen soll.

0

...

response.data.rates.CAD; 

Sie haben

response.data.CAD; 

...

app.canadianDollar = response.data.rates.CAD * app.usd;