首页 > 为什么Vue组件中的data是一个函数。

为什么Vue组件中的data是一个函数。

比如这个例子中的data():

<script>
    import { POILIST, MENU } from '../config/vuex.js';
    export default {
        data() {
            return {
                menu: MENU.data,
                poi: POILIST.data
            }
        },
        methods: {
            set() {
                MENU.list.push('首页');
                POILIST.list.push({
                    lng: 124.1,
                    lat: 42.3
                });
            }
        }
    }
</script>

为什么不直接写成

        data() {
            menu: MENU.data,
            poi: POILIST.data
        },

你看错了吧,是对象啊

这样写:
data: function(){
    return {};//这里return的是对象啊
}

或者这样写:
data() {
          return {};//这里return的是对象啊
       }

这种写法我学的时候官方文档已经不是这样的了,可能是旧版本的写法。
现在是对象方式写法,截一段项目代码给你看看。

var vm = new Vue({
    el:'#content',
    data:{
        curpageid:window.location.search.substr(4),//获取url的id
        prizealldata:[],//全部人员名称
        nextprize:1,//可否继续抽奖 0不可以 1可以
        prizeCount:'选择奖项',//奖项下拉菜单
        prizeNewCount:'',//新中奖人数
        viewCount:'',//显示新中奖人数
        curPrizeindex:-1,//当前奖项的索引
        curMode:'产生方式',//更换产生方式
        allModedata:[],//原始全部产生方式阵列 用于同步更新数据
        allPrizeman:[],//原始全部中奖人数阵列 用于同步更新数据
        curPrizepic:'',//当前奖品图片
        generatingMode:[
            '逐一产生','一次产生'
        ],//产生方式
        awardId:'',//奖项id
        lotterybtntext:'抽奖',//按钮内容
        lotterybtnstep:0,//逐一抽奖,btn状态,text内容 0:抽奖,1:停止抽奖 2:抽奖(继续抽奖),3:已结束
        lotterybtnonce:0,//一次性抽奖,btn状态,text内容 0:抽奖,1:抽奖中,2:已结束
        showname:[],//显示转动人员
        winningname:[],//已中奖人员列表
        lotteryData : [],//初始化全部信息
        awardsList:[],//全部奖项信息
        winmancount:0//中奖总人数
    },
    created:function(){
        var curthis = this;
        $.ajax({
            type:"post",
            url:"",
            async:true
        }).done(function(result){
            curthis.lotteryData = result.data;
            curthis.awardsList = result.data.wxAwards;
            curthis.winmancount;
            $.each(result.data.wxAwards,function(i,n){
                curthis.winmancount = curthis.winmancount+n.prizeMan;
                curthis.allModedata.push(n.generatingMode)
                curthis.allPrizeman.push(n.prizeMan)
            })
        })
        this.addminDisabled();
    },
    methods:{
        //转动
        changename:function(lotteryman,showname){
            showname = [];
            $.each(lotteryman,function(i,n){
                if(n.manUserId !== null){
                    showname.push(n.manName+'@'+n.manUserId)
                }else{
                    showname.push(n.manName)
                }
            });
        }
    },
    watch:{
        'prizeCount':function(newval,oldval){
            if(newval == '选择奖项'){
                this.prizeNewCount = '';
            }else{
                this.prizeNewCount = parseInt(newval.split('@')[0]);
                this.awardId = parseInt(newval.split('@')[1]);
                if(this.viewCount === ''){
                    this.viewCount = this.prizeNewCount;
                }else{
                    this.prizeNewCount = this.viewCount;
                }
            }
        },
        'winningname':function(){
            var j = 200;
            var i = '';
            $.each($('.right-side').find('.winingman'),function(){
                i=$(this).index();
                tt=function(id){
                    $('.right-side').find('.winingman').eq(id).show();
                }
                setTimeout('tt('+i+')',j);
                j=j+200;
            })
        }
    }
})

http://cn.vuejs.org/guide/com...


其实我觉得官方给那个例子根本就不成立
像下面这样写不是一样的么

var MyComponent = Vue.extend({
  data: { a: 1 }
})
【热门文章】
【热门文章】