首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vueJS [Vue warn]:计算属性"title“已在数据中定义

vueJS [Vue warn]:计算属性"title“已在数据中定义
EN

Stack Overflow用户
提问于 2017-09-06 16:15:57
回答 2查看 6K关注 0票数 1
代码语言:javascript
复制
<script>
import alertStore from '../stores/alert';
Vue.component('alert', require('vue-strap').alert);

export default {
    data () {
        return {
            show: alertStore.state.show,
            title: alertStore.state.title,
            msg: alertStore.state.msg,
            type: alertStore.state.type
        }
    },
    created () {
    },
    computed: {
        title () {

            return alertStore.state.title;
        },
        msg () {
            return alertStore.state.msg;
        },
        type () {
            return alertStore.state.type;
        },
        show () {
            return alertStore.state.show;
        },
        duration () {
            return alertStore.state.duration;
        }
    },
    methods: {
        dismissAlert: function () {
            this.$store.dispatch('dismissAlert', {title: '...'});
        },
    }
}

名称空间在Vue中是如何工作的?数据键、计算返回对象键和所有组件对象键都将添加到此实例中吗?

所以如果我覆盖这个。我得到了一些错误,比如:

Vue warn:计算属性"title“已在数据中定义。

Vue warn:计算属性"show“已在数据中定义。

Vue warn:计算属性"type“已在数据中定义。

Vue warn:计算属性"msg“已在数据中定义。

我该如何解决这个问题。

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-12-22 03:06:05

Vue将数据方法中的所有属性绑定到实例的根。它还对计算属性和方法执行此操作,因此必须使用不同的名称以避免命名冲突。

您发布的代码中的主要问题是每个数据属性都有命名冲突。实际上,因为您使用的是Vuex存储,所以根本不需要数据属性,只需要计算属性。

这也不是使用Vuex商店的最佳方式。一般的建议是将mapGetters用作文档here

票数 1
EN

Stack Overflow用户

发布于 2017-09-06 21:29:05

代码语言:javascript
复制
    <style lang="sass" scoped>
    @import '../../sass/_variables.scss';
    .dismiss {
        cursor: pointer;
        position: absolute;
        right: 0;
        top: 0;
        padding: 10px;
        margin: 10px;
    }
    .alert {
        width: 40%;
        border-radius: 0;
        border-width: 5px;
        margin: 10px;
        .row {
            margin: 0;
            .header {
                font-size: 1.25em;
                font-weight: 800;
            }
        }
    }
</style>
<template>
    <div>
        <alert class='card' v-show="show" placement="top" :duration="duration" :type="type">
            <div class="row">
                <div class="header">
                    {{ title }}
                </div>
                <div class='message'>
                    {{ msg }}
                </div>
            </div>
            <div class="dismiss" title="Click to dismiss" @click="dismissAlert">
                <i class="fa fa-times" aria-hidden="true"></i>
            </div>
        </alert>
    </div>
</template>
<script>
    import alertStore from '../stores/alert';
    Vue.component('alert', require('vue-strap').alert);

    export default {
        data () {
            return {
                show: alertStore.state.show,
                title: alertStore.state.title,
                msg: alertStore.state.msg,
                type: alertStore.state.type
            }
        },
        created () {
        },
        computed: {
            title () {
                return alertStore.state.title;
            },
            msg () {
                return alertStore.state.msg;
            },
            type () {
                return alertStore.state.type;
            },
            show () {
                return alertStore.state.show;
            },
            duration () {
                return alertStore.state.duration;
            }
        },
        methods: {
            dismissAlert: function () {
                this.$store.dispatch('dismissAlert', {title: '...'});
            },
        }
    }
</script>

这是我的模板代码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46070082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档