Vue(v2.5.17)之选项/数据 - data

官方链接地址:https://cn.vuejs.org/v2/api/#data

一、data的类型

  • data为Object对象类型
<div id="app">
    <span>姓名: {{ username }} </span><br>
    <span>年龄: {{ age }} </span><br>
    <span>是否成年: {{ isAdult }} </span><br>
    <span>课程: {{ classes }} </span><br>
    <span>兴趣: {{ avocation }} </span>
</div>
let vm = new Vue({
    el: '#app',
    data: {
        username: '小明',  // str
        age: 17,  // int
        isAdult: false,  // boolean
        classes: ['语文', '数学', '英语'],  // array
        avocation: null  // object
    }
})

页面渲染如下:
页面预览

  • data为Function函数类型
let vm = new Vue({
    el: '#app',
    data: function () {
        return {
            username: '小明',  // str
            age: 17,  // int
            isAdult: false,  // boolean
            classes: ['语文', '数学', '英语'],  // array
            avocation: null  // object
        }
    }
})

以上写法与data为Object类型页面渲染相同。
值得强调的是当组件被定义时,data必须声明为返回一个初始数据对象的函数,因为组件很有可能被用来创建多个实例。如果data 仍然是一个纯粹的对象 (含有零个或多个的 key/value 对),则所有的实例将共享引用同一个数据对象!通过提供 data 函数,每次创建一个新实例后,我们能够调用 data 函数,从而返回初始数据的一个全新副本数据对象

<div id="app">
    <global-message></global-message>
</div>
Vue.component('global-message', {
    template: "<p>我是{{ national  }}人.</p>",
    data: function () {
        return {
            national: '中国',
        }
    }
});
new Vue({
    el: '#app',
})

页面渲染如下:
我是中国人
如果这么写

Vue.component('global-message', {
    template: "<p>我是{{ national  }}人.</p>",
    data: {
        national: '中国'
    }
});
new Vue({
    el: '#app',
});

将会有如下错误,即定义为组件时data必须声明为Function函数类型:
错误

二、获取/编辑data的值

let data = {
    username: '小明',  // str
    age: 17,  // int
    isAdult: false,  // boolean
    classes: ['语文', '数学', '英语'],  // array
    avocation: null  // object
};
let vm = new Vue({
    el: '#app',
    data: data
})
  • 获取data数据:vm.$datavm._data
  • 获取data中对象属性值:vm.$data.usernamevm.$_data.usernamevm.username
  • 编辑data中对象属性值:data.classes = ['英语']vm.classes = ['英语']
    注意:data的编辑是响应式的,即数据改变时,视图也会改变(双向绑定)。如果想阻止修改现有的属性,可以使用Object.freeze()。如果尝试想编辑data中的值,就会出现以下错误:
    错误

三、注意点

  • 注意点1:以_$开头的属性 不会 被 Vue 实例代理
let vm = new Vue({
    el: '#app',
    data: {
        _username: '小明'
    }
})

将会有如下错误:
在这里插入图片描述
我们先到Vue Devtools来看一下Root,发现是有_username属性
在这里插入图片描述
我们再从Console看一下,发现是可以取到data属性的值的
在这里插入图片描述
总结:官方不建议data中属性使用_/$命名对象名,是为了防止与Vue 内置的属性、API 方法冲突,且在视图不能正常展示对应属性的数据,但可以通过vue实例访问data属性

  • 注意点2:给data添加新属性,并不能响应式展示
let vm = new Vue({
   el: '#app',
   data: {
       username: '小明'
   }
})

如想增加password,我们一般使用vm.password = '123654',可以看到添加新属性后在Root中并没有增加新属性
在这里插入图片描述
不过,我们可以通过m.$set( target, key, value )方法实现响应式的更新data数据。

  • 注意点3:在组件中的data必须声明为Function函数类型,具体本博文第一节
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Vue传递multipart/form-data参数时,可能会遇到无法传递的问题。其中一个可能的原因是未正确设置表单的enctype属性。即便是使用Vue,也需要确保表单是正确设置的。 enctype属性告诉浏览器表单数据应该如何编码。当表单包括二进制数据(如图片或文件)时,必须设置为multipart/form-data。但是,Vue默认情况下不会自动将enctype设置为multipart/form-data。因此,需要手动设置表单的enctype属性为multipart/form-data。 设置表单的enctype属性有两种方法。第一种方法是在HTML代码中手动设置表单的enctype属性。例如: <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" value="Upload" /> </form> 第二种方法是在Vue组件中使用v-bind指令设置表单的enctype属性。例如: <template> <form action="/upload" method="post" :enctype="'multipart/form-data'"> <input type="file" name="file" /> <input type="submit" value="Upload" /> </form> </template> 在第二种方法中,v-bind指令允许您绑定一个表达式到Vue组件中的HTML属性。在这种情况下,使用v-bind指令将enctype属性设置为multipart/form-data。这将确保浏览器正确地处理表单数据,并将二进制数据正常提交到服务器。 总之,要在Vue中成功传递multipart/form-data参数,您需要确保正确设置表单的enctype属性。此外,记得确保你的服务器端对multipart/form-data请求有正确的处理方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值