2017-07-21 1 views
1

Ich bin neu in vuejs.Dynamisch bindenden title tag in vuejs

Ich versuche, Daten auf dem Titel-Tag dynamisch zu binden. Ich benutzte vue-head, um dies auf einer einfachen HTML-Seite zu tun. Ich benutze kein webpack und npm.

Dies ist, wie ich den Titel-Tag binden:

var app = new Vue({ 
      el: 'html', 
      head: { 
       title: function() { 
       return { 
        inner: this.remaining + ' Tâches', 
        separator: ' ', 
        complement: ' ' 
       } 
       } 
      } 

Im vue-Kopf-Dokumentation, schlagen sie vor, dies zu tun:

methods: { 
    getAsyncData: function() { 
    var self = this 
    window.setTimeout(function() { 
    self.title = 'My async title' 
    self.$emit('updateHead') 
    }, 3000) 
    } 
}, 

ich es auch in der Uhren prop gesetzt versucht, aber es hat nicht funktioniert.

Hier ist meine gesamte Code: https://jsfiddle.net/5d70s0s6/1/

Dank

+0

Es ist für mich arbeiten. Ich kann sehen, dass das 'title'-Tag in deiner Geige steht. – abhishekkannojia

+0

Ja, es funktioniert, aber wenn ich eine Aufgabe ändere, möchte ich, dass der Titel dynamisch aktualisiert wird. Wie die {in der Geige}. Jetzt muss ich die Seite neu laden, um das Title-Tag zu ändern. – SahnaS

+0

Mögliches Duplikat von https://stackoverflow.com/questions/36612847/how-can-i-bind-the-html-title-content-in-vuejs – abhishekkannojia

Antwort

2

Verwenden Sie eine computed Eigenschaft.

computed: { 
    title: { 
    get() { 
     document.title = this.remaining 
     return this.remaining 
    }, 
    set(val) { 
     document.title = val 
    } 
    } 
} 

Sie brauchen nicht <title>{{title}}</title> zu verwenden. Wenn Sie in Ihrem Vue title ändern, wird es automatisch auf die Seite angewendet.

Außerdem sollten Sie keine Vue-Instanz an html, head oder body Tags binden. Verwenden Sie reguläre Elemente nur wie <div id="app"></div> und stellen Sie Ihre Vue el: '#app'

Oder Sie könnten so:

data: { 
    title: '', 
}, 
watch: { 
    title(val) { 
    document.title = val 
    } 
} 

Update: Während der Code über Ihr Problem lösen können. Ich schuf dieses winzigevue-title component, das in Ihrem Projekt leicht benutzt werden kann.

Beispiel:

<vue-title>{{title}}</vue-title> 
+0

Ich habe deine Lösung versucht, aber es hat nicht für mich funktioniert. Wie kann ich es an das Title-Tag binden? Mit {{title}}? – SahnaS

+0

Es sollte funktionieren, wenn Ihre Vue-Instanz an das 'html'-Element gebunden ist. Wenn Sie es in einer Testversion testen, wird es nicht funktionieren, weil es in einem Iframe ist. – Ikbel

+0

Ich versuche es in meinem localhost mit sublimText und sublimServer und es funktioniert nicht. Vielleicht habe ich es nicht gut gemacht, ich bin ein absoluter Anfänger mit Vuejs. Danke – SahnaS

Verwandte Themen