【问题标题】:Display vue component in laravel blade template在 laravel 刀片模板中显示 vue 组件
【发布时间】:2018-09-24 02:07:33
【问题描述】:

我在 app.js 中做一个简单的计算。它只是将产品价格乘以数量。我想在 laravel 中显示总值,以便用户可以预览他们的订单。

app.js

const app = new Vue({
    el: '#item',
    data() {
        return {
            form: {
                price: 0,
                quantity: 0,
                total: 0
            }
        }
    },
    methods: {
        updatePrice(event) {
            this.form.price = event.target.value;
            this.form.total = this.form.price * this.form.quantity
        },
        updateQuantity(event) {
            this.form.quantity = event.target.value;
            this.form.total = this.form.price * this.form.quantity
        }
    }

这很好。他们计算刀片文件中的表格值。但是我怎样才能显示总数?

我想在刀片文件中显示“total”。我怎样才能访问它?当我使用@{{ total }} 时出现此错误:

app.js:36519 [Vue 警告]:属性或方法“total”未定义 实例,但在渲染期间被引用。确保这 属性是反应性的,无论是在数据选项中,还是对于基于类的 组件,通过初始化属性。

【问题讨论】:

    标签: php laravel vue.js blade


    【解决方案1】:

    通常你会为此使用template interpolations

    类似于{{ form.total }},在 Blade 模板中,为了克服 {{ 的使用,它会是:

    <div id="item">
      <p>Total is: @{{ form.total }}</p>
    </div>
    

    或者,您可以更改 Vue 的分隔符并解决此问题。例如(delimiters: ['!{', '}!'],):

    const app = new Vue({
        el: '#item',
        delimiters: ['!{', '}!'],
        data() {
            return {
                form: {
                    price: 1,
                    quantity: 1,
                    total: 1
                }
            }
        },
        methods: {
            updatePrice(event) {
                this.form.price = event.target.value;
                this.form.total = this.form.price * this.form.quantity
            },
            updateQuantity(event) {
                this.form.quantity = event.target.value;
                this.form.total = this.form.price * this.form.quantity
            }
        }
    });
    <script src="https://unpkg.com/vue"></script>
    
    <div id="item">
      <p>Total is: !{ form.total }!</p>
      price: <input @input="updatePrice"><br>
      quantity: <input @input="updateQuantity"><br>
    </div>

    尽管这可行,但在您的情况下,我建议在pricequantity 中使用v-model,而不是直接处理事件,并将total 创建为computed property。这将是一种更好地利用 Vue 功能的方法(并且代码更少,是的):

    const app = new Vue({
        el: '#item',
        data() {
            return {
                form: {
                    price: 1,
                    quantity: 1,
                    total: 1
                }
            }
        },
        computed: {
            total() {
                return this.form.price * this.form.quantity
            }
        }
    });
    <script src="https://unpkg.com/vue"></script>
    
    <div id="item">
      <p>Total is: {{ total }}</p>
      price: <input v-model="form.price"><br>
      quantity: <input v-model="form.quantity"><br>
    </div>

    【讨论】:

    • 我试过这个。它在普通 JS 中工作正常,但是当我在刀片中使用它时,这不起作用。我使用@符号绕过刀片渲染
    • 啊,是的。在刀片中,它类似于:&lt;p&gt;Total is: @{{ form.total }}&lt;/p&gt;。这是你尝试过的吗?
    • 没错。这不起作用,我什么也没显示。我猜 dom 没有更新
    • 是的,您也可以尝试更改分隔符,通过delimiters: ['!{', '}!'], 并使用&lt;p&gt;Total is: !{ form.total }!&lt;/p&gt;,查看更新的答案。也许你可以试试这个,看看是不是其他的问题。
    • 谢谢。我用 {{ form.total }} 解决了我真是个笨蛋!感谢您的评论
    猜你喜欢
    • 2020-09-22
    • 2021-11-27
    • 2019-12-02
    • 2014-09-14
    • 1970-01-01
    • 2020-06-22
    • 2021-09-20
    • 2018-09-05
    • 2014-11-07
    相关资源
    最近更新 更多