Heim  >  Fragen und Antworten  >  Hauptteil

Die Vorlage kann den Inhalt der berechneten Eigenschaft nicht erfassen, der Lebenszyklus-Hook kann ihn jedoch normal aufzeichnen

<p>Ich erstelle einen Online-Shop, in dem Sie Produkte bestellen können, ohne den Inhalt Ihres Warenkorbs zu beeinträchtigen. Die Art und Weise, wie ich es umsetze, besteht darin, eine Seite für Warenkorbartikel und einzelne Produkte zu teilen. Es prüft, ob der Parameter „productID“ gesetzt ist und verwendet in diesem Fall andere Daten. </p> <p>Dies ist die Funktion, die ich geschrieben habe: </p> <pre class="brush:js;toolbar:false;"> Produkte: function() { if ( this.$route.query.pid ) { var Produkt = [{}] axios.get(`/api/products/${this.pid}`).then(response => { Produkt[0].id = Antwort.Daten[0].id Produkt[0].name = Antwort.Daten[0].Name Produkt[0].units = Antwort.Daten[0].Einheiten Produkt[0].image = Antwort.Daten[0].Produkt_Bild[0].Bild Produkt[0].Preis = Antwort.Daten[0].Preis Produkt[0].Menge = 1 }) return Object.assign(product) } anders { Geben Sie this.$store.state.cart zurück } } }, </pre> <p>Dies ist der Lebenszyklus-Hook (beforeMount), der erfolgreich Daten abruft: </p> <pre class="brush:js;toolbar:false;"> console.log(this.products) } </pre> <p>Das Problem besteht nun darin, dass das Produktattribut in der Vorlage als leer betrachtet wird. Wenn ich die Seite ohne Abfrageparameter aufrufe, funktioniert alles einwandfrei, ich kann nur die berechneten Daten für die einzelnen Produkte nicht finden. </p> <p>Wie kann dieses Problem gelöst werden? Vielen Dank im Voraus für Ihre Hilfe! </p>
P粉604669414P粉604669414415 Tage vor508

Antworte allen(1)Ich werde antworten

  • P粉665679053

    P粉6656790532023-08-31 11:46:54

    vue/no-async-in-computed-properties

    属性在模板中没有被捕获,但生命周期钩子可以通过计算属性获取数据

    你在控制台中看到的原因是因为大多数现代浏览器将对象作为实时数据记录(一旦对象更新,控制台也会更新)。所以你在控制台中看到的不是console.log执行时对象的值,而是稍后的值。你可以通过使用console.log(JSON.parse(JSON.stringify(this.products)))来确认这一点...

    为了解决这个问题,使用watch而不是computed

    data() {
      return {
        products: []
      }
    },
    watch: {
      '$route.query.pid': {
        handler: function(newValue) {
          if(newValue) {
            axios.get(`/api/products/${newValue}`).then(response => {
              var product = {
                id: response.data[0].id,
                name: response.data[0].name,
                units: response.data[0].units
                image: response.data[0].product_image[0].image
                price: response.data[0].price
                quantity: 1
              }
              this.products = []
              this.products.push(product)
          } else this.products = this.$store.state.cart
        },
        immediate: true
      }
    },
    

    Antwort
    0
  • StornierenAntwort