2017-09-02 1 views
0

ich einfache Liste Beispiel in vue (A ToDo-Liste) .Hier Ich versuche hinzufügen Filter von Versalien (Mit anderen Worten: alle Buchstaben sind in der Hauptstadt) zu machen versuchen .Aber es mir zeigt hier ist ErrorWie zeigen Sie Elemente in der Liste Großbuchstaben?

mein Code https://plnkr.co/edit/THtaYSnGkBp7BlMYcNUl?p=preview

var app = new Vue({ 
    el: '#App', 
    data: { 
     message: '', 
     items: [{ 
      name: "test1" 
     }, { 
      name: "test2" 
     }, { 
      name: "test3" 
     }] 
    }, 
    methods: { 
     addTodo: function() { 
      this.items.push({ 
       name:this.message 
      }); 
      this.message =''; 
     }, 
     deleteTodo:function (item) { 
      console.log(item) 
      var index = this.items.indexOf(item); 
      this.items.splice(index, 1); 
     } 
    }, 
    computed: { 
     upperCase: function() { 
      return this.items.map(function (item) { 
       return this.item.upperCase(); 
      }) 
     } 
    } 
}) 

Fehler: Fehler in Funktion machen: "Typeerror: Kann nicht Eigentum 'Großschreibung' undefinierter lesen"

**vue.js:572 TypeError: Cannot read property 'upperCase' of undefined 
    at script.js:29 
    at Array.map (<anonymous>) 
    at Vue$3.upperCase (script.js:28) 
    at Watcher.get (vue.js:2883) 
    at Watcher.evaluate (vue.js:2990) 
    at Proxy.computedGetter (vue.js:3265) 
    at Proxy.eval (eval at createFunction (vue.js:9818), <anonymous>:2:311) 
    at Vue$3.Vue._render (vue.js:4123) 
    at Vue$3.updateComponent (vue.js:2542) 
    at Watcher.get (vue.js:2883)** 
+0

* es zeigt mir Fehler * ist eine nutzlose Problembeschreibung, wenn Sie uns auch sagen, was * error * es Ihnen zeigt. Offensichtlich erhalten Sie eine Fehlermeldung, und diese Nachricht ist auf dem Bildschirm direkt vor Ihnen.Warum ist es nicht hier in deiner Frage, damit wir diese Informationen auch haben? –

+0

ok warten Sie, dass .see aktualisieren – naveen

+0

@naveen Überprüfen Sie meine Antwort – Ofisora

Antwort

1

Die Fehler, die Sie gemacht haben:

  • upperCase() kein Javascript-Funktion ist. Es sollte toUpperCase() sein.
  • müssen Sie nicht this.item verwenden, verwenden Sie einfach item innerhalb der Callback-Funktion.
  • Da item ein Objekt ist, können Sie die Methode toUpperCase() nicht ausführen. Sie müssen item.name.toUpperCase() tun (das ist, was Sie versuchen).

Ihre upperCase Funktion ändern:

upperCase: function() { 
    return this.items.map(function (item) { 
      return item.name.toUpperCase(); 
    }) 
} 
  • Sie den Wert aus upperCase Funktion zurückkehrt, sondern versuchen item.name in Ihrer index.html Datei anzuzeigen. Ändern Sie das nur in item.

    <li v-for="item in upperCase" > 
        {{item}} 
        <button @click="deleteTodo(item)">X</button> 
    </li> 
    

Aktualisiert plnkr: https://plnkr.co/edit/17dCvKKDa7EgwHetzzMR?p=preview

+0

Was ist 4-Punkt? Sie geben den Wert von der Funktion UpperCase zurück, aber versuchen, Element anzuzeigen. Name in Ihrer index.html Datei. Ändere das nur zum Gegenstand. – naveen

+0

Die Funktion 'upperCase' gibt nur ein Objekt ohne Schlüssel zurück. Und in Ihrer 'index.html' Datei greifen Sie auf 'item.name' zu, also musste ich es in' item' ändern, um die Werte zu sehen. – Ofisora

+0

ODER, geben Sie return {name: item.name.toUpperCase()}; 'from' upperCase' ein, wenn Sie mit dem Schlüssel auf 'item.name' zugreifen wollen. – Ofisora

1

Ihre Funktion innerhalb von map sollte sich auf item (ihr Parameter) beziehen und nicht auf this.item, was nicht existiert, weil die Funktion nicht als Methode aufgerufen wird.

+0

Könnten Sie bitte teilen Sie Plotter – naveen

2

Sie könnten Javascript alle zusammen und verwenden CSS überspringen, um Text in Großbuchstaben zu machen.

.uppercase { 
 
    text-transform: uppercase; 
 
}
<p class="uppercase">I am uppercase</p> 
 
<p>I am normal case</p>

0

Für mögliche zukünftige Leser, filters wurden dafür mit dem Vorteil, dass sie wiederverwendbar, anstatt mit einer berechneten Eigenschaft für jede Liste, die Sie zu nutzen, müssen speziell hergestellt.

Vue.js allows you to define filters that can be used to apply common text formatting.

Vorlage:

<li v-for="item in items" > 
    {{item.name | capitalize}} 
    <button @click="deleteTodo(item)">X</button> 
</li> 

Filter:

filters: { 
    capitalize: function (value) { 
    if (!value) return '' 
    value = value.toString() 
    return value.charAt(0).toUpperCase() + value.slice(1) 
    } 
} 
Verwandte Themen