【问题标题】:Nested vue instance not returning computed: function values嵌套的 vue 实例不返回计算:函数值
【发布时间】:2017-11-15 18:40:24
【问题描述】:

我正在使用 twig,在我的基础中,我有一个新的 Vue 实例,它将所有内容分配给 #app,它是紧跟在 body 标记之后的部分。

在 users.html 页面中,我扩展了这个 base.twig,之所以不能在 base.twig 上使用相同的代码是因为某些数据只传递给 users 控制器上的 vue,所以我得到错误在任何其他页面上,因为未设置用户数据。

这就是我的 base.twig

new Vue({
    el: '#app',
    data: {
        hideNav: false,
        userMenuDropdown: false,

        showModal: false
    }
});

在我的 users.html 我有:

var UsersPage = new Vue({
    el: '.users__main',
    data: {
        search_users: '',
        users: {{ users|raw }}
    },
    computed: {
        filteredUsers,
    }
});

function filteredUsers(){
    var self = this;
    return this.users.filter(function(cust){
        return cust.first_name.toLowerCase().indexOf(self.search_users.toLowerCase())>=0;
    });
}

我只是想搜索一个用户,如果我取消第一个引用 #app 的 vue 实例,而不是 .users__main.

我已经设置了一个 jsfiddle 来进一步解释确切的问题,this version(不起作用)有两个 vue 实例,一个在 base.twig 中,另一个在 user.html 文件中,this version 不包含两个实例(有效)。

我为此弄乱了组件,但我无法做到这一点。

【问题讨论】:

    标签: symfony vue.js twig vuejs2


    【解决方案1】:

    所以,我在阅读文档后能够弄清楚,我最终使用了一个带有 inline-template 的组件。

    在我的 base.twig 中,我创建了一个也是唯一一个 Vue 实例。

    new Vue({
        el: '#app',
    });
    

    现在在我的 user.html 文件中扩展了 base.twig 我创建了一个组件。

    这最终成为组件,以及我在问题的 jsfiddle 示例中提供的搜索功能如何使用它。

    Vue.component('user-search', {
        data: function () {
            return {
                search_users: '',
                users: {{ users|raw }} // this here is json_encoded data from twig passed from the php framework controller
            }
        },
        computed: {
            filteredUsers,
        }
    });
    
    function filteredUsers(){
        var self = this;
        return this.users.filter(function(cust){
            return cust.first_name.toLowerCase().indexOf(self.search_users.toLowerCase())>=0;
        });
    }
    

    并使用该组件(根据我的代码展示如何使用它):

    <user-search inline-template>
        <input type="text" v-model="search_users">
        <!-- rest of the code with the for loop -->
    </user-search>
    

    【讨论】:

    • 你不能在对象定义中使用插值users: {{ users|raw }}
    • @WaldemarIce 到目前为止它正在工作,这是从控制器传递的树枝数据,就像它是普通的 php 代码一样。我可以使用 axios 或普通的 http 请求来严格通过 javascript 获取数据,但是由于我可以通过我的 php 框架轻松获取它,所以要容易得多。
    • 你在 new Vue 中使用 new Vue?
    • 不,现在我只有 1 个新的 Vue({{ ... }}) 实例;在我附加到#app 的base.twig 中(在body 标记之后包装所有html 代码的部分),然后我将base.twig 扩展到我的其他视图文件,现在我正在使用组件,所以只有1 个vue 实例已经被创造了。在这一点上我做错了什么吗?
    • 但正如我在您的第一个小提琴中看到的,.users__main 部分嵌套在 div app 中,因此您将第二个 Vue 实例嵌套到第一个实例中。
    猜你喜欢
    • 1970-01-01
    • 2019-04-16
    • 2021-12-12
    • 2017-07-23
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    相关资源
    最近更新 更多