编程语言
首页 > 编程语言> > javascript – 在VueJs 2.0中重新初始化数据的正确方法

javascript – 在VueJs 2.0中重新初始化数据的正确方法

作者:互联网

我在SO:Is there a proper way of resetting a component’s initial data in vuejs?上经历了这个答案

但是,现在不允许使用当前方法,VueJS禁止更改$data var.

正如您在此https://github.com/vuejs/vue/issues/2873中所见($data不允许修改.)

所以如果我尝试上面的方法,我会得到一个VueJS警告:

[Vue warn]: Avoid replacing instance root $data. Use nested data
properties instead.

这是我的JS代码,

function initialState () {
        return {
            h2: 0,
            ch4: 0,
            c2h6: 0,
            c2h4: 0,
            c2h2: 0,
            c3h8: 0,
            c3h6: 0,
            co: 0,
            co2: 0,
            o2: 0,
            n2: 0,
            selected: ''
        }
    }
    export default {
        name: 'something',
        data () {
            return initialState() // This is working fine 
        },
        computed: {
            tdcg: function () {
                // some logic here...
            }
        },
        methods: {
            resetFields: function () {
                this.$data = initialState() // --> This is what I want to achieve!
            }
        }
    }

那么重新初始化数据的正确和最简单的方法是什么?

解决方法:

您可以使用Object.assign遍历所有属性并分配它们:

export default {
    data () {
        return {
            h2: 0,
            // other attributes...
        };
    },
    methods: {
        resetFields () {
            Object.assign(this.$data, this.$options.data.call(this));
        }
    }
}

这是一个演示小提琴:https://jsfiddle.net/797yyvtz/

注意:我正在使用此.$options.data再次调用原始数据方法以获取数据的新副本.不需要单独的initialState函数.数据方法是初始状态函数.

标签:javascript,vue-js,vue-component
来源: https://codeday.me/bug/20190930/1835030.html