Vue.js VueJS中具有函数的自定义数据对象

Vue.js VueJS中具有函数的自定义数据对象,vue.js,vuejs2,Vue.js,Vuejs2,我正在尝试构建一个自定义数据源对象作为表组件的数据部分,但是VueJS似乎正在重新写入该对象以使其具有反应性。vue组件可以很好地访问直接数据值(即this.dataSource.columns或this.dataSource.sort),但是我不能调用对象中的任何函数,也不能(例如)使用dataSource.rows()函数检索过滤/排序的行数据。Vue只能处理计划javascript数据对象吗?或者我可以用什么技巧来让它发挥作用 我想在表组件中使用对象,如: <table ref="b

我正在尝试构建一个自定义数据源对象作为表组件的数据部分,但是VueJS似乎正在重新写入该对象以使其具有反应性。vue组件可以很好地访问直接数据值(即this.dataSource.columns或this.dataSource.sort),但是我不能调用对象中的任何函数,也不能(例如)使用dataSource.rows()函数检索过滤/排序的行数据。Vue只能处理计划javascript数据对象吗?或者我可以用什么技巧来让它发挥作用

我想在表组件中使用对象,如:

<table ref="bodyTable" class="table-body">
    <tbody>
        <tr v-for="row in dataSource.rows" >
            <td v-for="column in dataSource.columns">{{row[column.name]}}</td>
        </tr>
    </tbody>
</table>

{{row[column.name]}
但是,vue似乎无法使用dataSource.rows函数,也无法调用对象中的任何其他方法

function RealtimeDataStore(columns,data,sort,filter){
    this.columns = columns;
    this._data = data;
    this.sort = sort;
    this.filter = filter;
    this.keyField = findKeyColumn();
    function updateData(data){
        //TODO: merge or insert the data into the this._data array
        //TODO: let parent component know data changed
    }
    function findKeyColumn(){
        for(var i=0;i<columns.length;i++){
            if(columns[i].isKey) return column[i].name;
        }
        return null;
    }
    function setSort(sortData){
        //TODO: verify sortData is in correct format and all columns are found
        this.sort = sortData;
        //TODO: let the component know data may have changed
    }
    function setFilter(filterData){
        //TODO: verify filterData is in correct format and all columns are found
        this.filter = filterData;
        //TODO: Let the component know data may have changed
    }
    function rows(){
        //TODO: filter data if needed
        //TODO: sort data if needed
        return this._data;   
    }

}
function实时数据存储(列、数据、排序、筛选){
this.columns=列;
这个。_data=数据;
this.sort=排序;
this.filter=过滤器;
this.keyField=findKeyColumn();
函数更新数据(数据){
//TODO:将数据合并或插入到此数据数组中。\u
//TODO:让父组件知道数据已更改
}
函数findKeyColumn(){

对于(var i=0;i通常,是的,最好坚持Vue中的for数据

然而,在这种情况下,这并不是代码不起作用的原因

首先,
rows
RealtimeDataStore
的作用域内声明,在其外部不可访问。其次,代码不将其作为函数调用。
数据源中的row。rows
应该是dataSource.rows()中的
row

下面是一个如何让代码工作的示例

console.clear()
函数数据源(){
this.rows=函数(){
返回[1,2,3]
}
}
新Vue({
el:“应用程序”,
数据:{
来源:新数据源()
}
})

{{row}}

谢谢-我错过了这一点。当行发生变化时,有没有办法触发反应性事件?对于简单的数据对象,vue在其上设置了一个观察者-我可以对函数执行同样的操作吗?@JohnP好的,您可以将其设为属性,然后自动将其设为反应性。