2017-03-01 2 views
0

Ich bin gerade auf VueJS 2 migriert, und jetzt habe ich ein Problem.TypeError: this.decodeHtml ist keine Funktion

In einem Filter, ich eine benutzerdefinierte Funktion aufrufen, aber ich bekomme: TypeError: this.decodeHtml is not a function

Hier ist mein Code:

new Vue({ 
     el: '#modal', 
     data: {...} 
     computed: {...} 
     methods: { 
       decodeHtml: function decodeHtml(html) { 
         var txt = document.createElement("textarea"); 
         txt.innerHTML = html; 
         return txt.value; 
        }, 
     ... }, 
     filters: { 
        html: function html(_html) { 
         return this.decodeHtml(_html); 
        } 
       } 

in meinem HTML, ich nenne es: @{{ categoryFullName | html }}

Jede Idee Warum??? Vor der Migration funktionierte es gut.

Hier ist die fiddle

+1

Was ist das Ergebnis von 'console.log (this)'? Und warum benennen Sie die Funktion nach dem Schlüsselwort 'function'? – Jackowski

+0

Wie soll ich tun, um es zu benennen ??? –

+1

in Ihrem Fall: 'decodeHtml: function() {...}'. Aber ich kann falsch liegen und das kann auch eine gültige Möglichkeit sein, Funktionen zu benennen. – Jackowski

Antwort

0

Sie ein Problem mit Rahmen haben. Auf Ihrer html Funktion ist die this Variable ein Window Objekt und kein Vue Objekt, wie es sein sollte.

Die Problemumgehung, die Sie tun können, ist, anstatt die Funktion decodeHtml aufzurufen, die Sie in Ihrem Filter implementieren. Gefällt mir:

filters: { 
    html: (html) => { 
    var txt = document.createElement("textarea"); 
    txt.innerHTML = html; 
    return txt.value; 
    } 
}