赞
踩
<script src="js/vue.js"></script>
- <body>
- <div id="boxOne">我是{{name}}</div>
- <script>
- new Vue({//首先创建一个Vue对象
- el: "#boxOne",//通过el来确定数据要绑定到的容器
- data:{
- name: "程咬金",//这个是Vue中存储的数据,对象套对象。
- }
- })
- </script>
- </body>
3.然后我们再尝试绑定属性,就以name属性为例
在上面的div中添加name属性并绑定到Vue的值:
<div id="boxOne" v-bind:name="name">我是{{name}}</div>
v-bind也可以简写为: 你没看错就是冒号,所以上面的等价于下面
<div id="boxOne" :name="name">我是{{name}}</div>
这种绑定有个缺点就是当标签中的属性值发生改变时,Vue中的值并不会发生变化,这时候就要用到v-model,v-model专门用于input表单场景中,我们新创建一个表单测试
- <form action="">
- <input v-model="name">
- </form>
这样当输入框中文本发生改变时,Vue中的name值也会发生改变!
mvvm模型就是model view viewmodel三个缩写,二Vue扮演的角色就是在model和view中间的viewmodel,它将底层的数据model,经过自己的处理展现到界面上,这就是viewmodel,简称vm。
Object.defineproperty("要更改属性的对象",要变化的属性,{键值对};
- var people = {
- name: "chenpei",
- sex: "女"
- }
- //向对象中添加属性
- Object.defineProperty(people,"age",{
- value: 22,
- writable: true,
- //规定添加的属性值能否被修改。
- enumerable: true,
- //规定能否在遍历的时候被遍历到,还有其他原数据在之前提到过这里不再提
- });
所以通过这种方法赋值和普通的赋值具有本质上的不同,这也是Vue底层选用的原因。
- var people = {
- name: "chenpei",
- sex: "女"
- }
- var peopleTwo = {
- name: "wuji",
- sex: "男",
- }
- //向对象中添加属性
- Object.defineProperty(people,"age",{
- value: 22,
- writable: true,
- //规定添加的属性值能否被修改。
- enumerable: true,
- //规定能否在遍历的时候被遍历到,还有其他原数据在之前提到过这里不再提
- });
- //修改peopleTwo的getter和setter
- Object.defineProperty(peopleTwo,"sex",{
- //当有人从peopleTwo中读取sex属性时,会执行get方法获得people中sex属性的值
- get(){
- return people.sex;
- },
- //同上理,当有人修改sex属性时,people中的sex属性也会被setter改变
- set(value){
- people.sex = value;
- }
- });

2.Vue底层就用到了这种数据代理,请看下图(图片来源:尚硅谷)
3.这样实现数据代理之后,Vue即vm将自身_data对象中储存的数据被vm自身代理,实现数据同步,这样也方便了我们在插值语法中书写,只需要写数据名即可。
- <div id="boxOne" v-bind:name="name">
- 我是{{name}}
- <!--事件绑定中指定的函数会默认传入event事件对象,但是当参数中有其他参数传入,事件对象就会被覆盖,用Vue语法$符标记一下就可以不被覆盖-->
- <button id="clickTest" @click="myClick($event,22)" value="点击事件"></button>
- </div>
- <script>
- new Vue({//首先创建一个Vue对象
- el: "#boxOne",//通过el来确定数据要绑定到的容器
- data:{
- name: "程咬金",//这个是Vue中存储的数据,对象套对象。
- },
- methods:{
- myClick(event,num){
- //在控制台输出测试
- console.log(event,num);
- }
- }
- })
- </script>

控制台输出内容:
- <div id="boxOne" v-bind:name="name" @click="myClickDiv">
- 我是{{name}}
- <!--事件绑定中指定的函数会默认传入event事件对象,但是当参数中有其他参数传入,事件对象就会被覆盖,用Vue语法$符标记一下就可以不被覆盖-->
- <button id="clickTest" @click="myClick($event,22)" value="点击事件"></button>
- </div>
- <script>
- new Vue({//首先创建一个Vue对象
- el: "#boxOne",//通过el来确定数据要绑定到的容器
- data:{
- name: "程咬金",//这个是Vue中存储的数据,对象套对象。
- },
- methods:{
- myClick(event,num){
- //在控制台输出测试
- console.log(event,num);
- //看看事件的触发者
- console.log("内部button的触发者是:" + event.target);
- },
- //div的点击事件函数
- myClickDiv(event){
- console.log(event,"我是div中的点击事件函数");
- console.log("div中事件的触发者是:" + event.target);
- }
- }
- })
- </script>

控制台内容如下:
由以上内容我们可以知道:
- myClick(event,num){
- //取消冒泡
- event.stopPropagation();
- //在控制台输出测试
- console.log(event,num);
- //看看事件的触发者
- console.log("内部button的触发者是:" + event.target);
- }
然后当我们点击按钮的时候就只有最里面的函数得到执行。
<button id="clickTest" @click.stop="myClick($event,22)">
也能阻止冒泡
prevent | 阻止元素默认事件,像a标签的跳转等等 |
stop | 阻止冒泡 |
once | 事件仅允许触发一次 |
capture | 使用事件的捕获模式,就是由外到内执行函数 |
self | 只有Event.target是自己的时候才执行函数,如果在例子中加入此,也可阻止冒泡 |
passive | 事件的默认函数立即执行,无需等待回调函数执行完毕 |
- <style>
- #textSmall{
- width: 100px;
- height: 40px;
- background-color: aquamarine;
- overflow: auto; /*设置溢出显示滚动条*/
- }
- </style>
- <body>
- <div id="textSmall" @wheel="whenWheel">
- Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。
- 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。
- Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。
- 另一方面,当与现代化的工具链以及各种支持类库结合使用时,
- Vue 也完全能够为复杂的单页应用提供驱动。
- </div>
-
- <script>
- new Vue({
- el: "#textSmall",
- methods:{
- whenWheel(){
- //制造函数执行长时间,看看默认行为执行情况
- for(i = 0; i<10000;i++){
- console.log("我行");
- }
- }
- }
- })
- </script>
- </body>

结果是每当我在内容上面通过鼠标滚轮滚动时,要等一万个我行输出完毕,滚动条才会移动内容才会变化。
2.要取消这种行为,只需要修饰符passive
<div id="textSmall" @wheel.passive="whenWheel">
当我们绑定键盘事件的时候,事件对象会自动获取你所按的按键的别名和键码保存在属性中
下面例子用input元素的keyup事件来在控制台获取按键别名,利用event.key属性
- <form action="" id="formContainer">
- <input type="text" placeholder="输入完内容后点击回车!" @keyup="keyMethod">
- </form>
- <script>
- new Vue({
- el: "#formContainer",
- methods:{
- keyMethod(ev){
- console.log("您按的键是:" + ev.key);
- }
- }
- })
- </script>
再给按键事件指定特定的键触发,需要加上if判断语句
- if(ev.keyCode == 13)//十三是回车键的键码
- console.log("您按的键是:" + ev.key);
- }
@keyup.键盘别名 ="要绑定的函数";
@keyup.ctrl.y = "函数" 按住ctrl和y,y起才能执行函数
@keyup.caps-lock ="函数"
修饰符可以连着写
- <form action="" id="formContainer">
- <input type="text" v-model="firstName"><br><br>
- <input type="text" v-model="lastName"><br><br>
- <!--直接动态绑定input输入框的值到Vue的属性,实现span内容自动更新-->
- <span>{{firstName}}-{{lastName}}</span>
- </form>
- <script>
- var vm = new Vue({
- el: "#formContainer",
- data:{
- firstName: "陈",
- lastName: "湫"
- },
- methods:{
- keyMethod(ev){
- console.log("您按的键是:" + ev.key);
- }
- }
- });
- </script>

- <form action="" id="formContainer">
- <input type="text" v-model="firstName"><br><br>
- <input type="text" v-model="lastName"><br><br>
- <!--直接动态绑定input输入框的值到Vue的属性,实现span内容自动更新-->
- <span>{{fullName}}</span>
- </form>
- <script>
- var vm = new Vue({
- el: "#formContainer",
- data:{
- firstName: "陈",
- lastName: "湫"
- },
- methods:{
- keyMethod(ev){
- console.log("您按的键是:" + ev.key);
- }
- },
- computed:{
- fullName:{
- //当有调用fullName时,会自动执行getter和setter,来给fullName属性赋值
- get(){
- //这里的this被Vue优化为了vm对象
- return this.firstName + "-" + this.lastName;
- }
- }
- }
- });
- </script>

最终效果和上面一致。
- set(value){
- var zu = value.split("-");//将值以-为间隔拆分成数组
- this.firstName = zu[0];
- this.lastName = zu[1];
- }
实现效果,我更改fullname的值,自动调用setter
属性值也跟着变化:
- fullName(){
- return this.firstName + "-" + this.lastName;
- }
- watch:{
- fullName:{
- handler(newValue,oldValue){
- console.log("属性发生了改变变化前的值是:" + oldValue );
- }
- }
- }
然后我们修改在页面控制台修改fullName的值,发现watch的handler执行了
- <div id="weatherTest">
- <span>我爱着{{rel}}!</span><br>
- <button @click="changeWeather">点我改变天气</button>
- </div>
-
- <script>
- new Vue({
- el: "#weatherTest",
- data: {
- season: "冬天"
- },
- computed: {
- rel(){
- if(this.season == "冬天"){
- return "北风吹雪";
- }else if(this.season == "春天"){
- return "鸟语花香"
- }
- }
- },
- methods:{
- changeWeather(){
- if(this.season == "冬天"){
- this.season = "春天";
- }else{
- this.season = "冬天";
- }
- }
- },
- watch:{
- season:{
- //immediate: true, //在值发生变化之前先执行一次函数
- handler(newValue,oldValue){
- console.log("值发生了改变,改变前是:" + oldValue + "\n改变后的值是:" + newValue);
- }
- }
- }
- })
- </script>

效果是当季节发生变化,我爱的天气发生变化,同时season属性被监控,改变前后的值被输出到控制台
vm.$watch(要监视的变量,{handler函数和一系列原数据对});
当number中a的值发生改变的时候,控制台输出它的上一个值,而b值的变化不会影响到handler函数:
- <div id="deepSeeContainer">
- <span>a的值是:{{number.a}}</span><br>
- <button @click="number.a++">点我给a的值加1</button><br>
- <span>b的值是:{{number.b}}</span><br>
- <button @click="number.b++">点我给a的值加1</button>
- </div>
- <script>
- new Vue({
- el: "#deepSeeContainer",
- data:{
- number:{
- a: 1,
- b: 2
- }
- },
- watch:{
- "number.a":{
- //注意监视层级结构的语法,加引号是因为键本来就只能是字符串,不过我们习惯直接写了,这里却不允许去掉引号
- handler(newValue,oldValue){
- console.log("a的值发生了改变,原来的值是:" + oldValue)
- }
- }
- }
- });
- </script>

- watch:{
- number:{
- deep: true, //不开启这个参数,Vue的watch就无法看到直接属性内的数据
- //因为选的是上层结构,所以这里传入的参数发生了改变,是一个对象,里面分别有a和b的新值
- handler(old){
- console.log("a或b的值发生了改变,原来的值是:" + "a的新值是" +old.a +"b的新值是:" + old.b);
- }
- }
- }
这样两者的变化都能触发handler函数了
- <style>
- .one{
-
- }
- .two{
- }
- .three{
- }
-
- </style>
- <div class="one two three"></div>
- <style>
- .one{/*div的基础样式*/
- border:2px solid green;
- border-radius: 3px;
- width: 200px;
- height: 200px;
- }
- .two{
- background-color:aquamarine;
- }
- .three{
- background-color:brown;
- }
- .four{
- background-color:aliceblue;
- }
- </style>
- <body>
- </div>
- <div id="classShuan" class="one" :class="colorChoose" @click="changeColor"></div>
- <script>
- new Vue({
- el:"#classShuan",
- data:{
- colorChoose: "two",
- //这个属性我们利用函数把它的值随机化
- //而它又被上面的class属性绑定到,所以class选择也是随机的
- },
- methods:{
- changeColor(){
- var colorArr = ["two","three","four"];
- //生成一个0到3的随机整数,不包括3,把数组下标随机化
- var downIndex = Math.floor(Math.random()*3);
- //修改colorChoose的值
- this.colorChoose = colorArr[downIndex];
- //最后要把该函数绑定到div点击事件上,实现点击随机切换三种效果
- }
- }
- })
- </script>
-
- </body>

测验通过!
- <style>
- .one{/*div的基础样式*/
- border:2px solid green;
- border-radius: 3px;
- width: 200px;
- height: 200px;
- }
- /* 让按钮在div元素的下方居中不动 */
- #classShuan div{
- margin: 140px auto auto auto;
- text-align: center;
- }
- .five{
- text-shadow: 3px 3px 5px red;
- /*添加文字阴影效果*/
- }
- .six{
- text-align: center;
- }
- </style>
- <body>
- <div id="classShuan" class="one" :class="colorChoose">
- <span>我是神仙不下凡</span>
- <div>
- <button @click="addTextShadow">点我增加文本阴影</button>
- <button @click="addTextCenter">点我让文字居中</button>
- </div>
- </div>
- <script>
- new Vue({
- el:"#classShuan",
- data:{
- colorChoose:{
- "five": false,
- "six": false
- //这时候我们动态绑定到class的是一个对象,
- //这个对象的键就是我们要动态添加的class,只有为true时才会生效
- },
-
- },
- methods:{
- addTextShadow(){
- this.colorChoose.five = true;//增加文字阴影的函数,绑定到按钮上
- },
- addTextCenter(){
- this.colorChoose.six = true;//增加文字居中的函数,绑定到按钮上
- }
- }
- })
- </script>
- </body>

点击第一个按钮效果:
再点击第二个按钮增加居中效果:
<div style="font-size:45px;"></div>
2 .Vue动态绑定的写法
- <body>
- <span :style="myStyleObj">我是神仙不下凡</span>
- <script>
- new Vue({
- el:"#classShuan",
- data:{
- myStyleObj:{
- fontSize: "48px",
- //这是样式对象内部,键值就是要修改的样式属性名
- //跟原来不一样的是要改成驼峰命名法
- }
-
- },
- });
- </script>
- </body>

两种方式效果一致:
- <div id="classShuan" class="one" :class="colorChoose" v-if="a">
- <span :style="myStyleObj">我是神仙不下凡</span>
- <div>
- <button @click="addTextShadow">点我增加文本阴影</button>
- <button @click="addTextCenter">点我让文字居中</button>
- </div>
- </div>
- <script>
- var vmMe = new Vue({
- el:"#classShuan",
- data:{
- colorChoose:{
- "five": false,
- "six": false
- //这时候我们动态绑定到class的是一个对象,
- //这个对象的键就是我们要动态添加的class,只有为true时才会生效
- },
- myStyleObj:{
- fontSize: "48px",
- //这是样式对象内部,键值就是要修改的样式属性名
- //跟原来不一样的是要改成驼峰命名法
- },
- a: true
-
- },
- </script>

我们在控制台模仿用户改变a的值让元素消失:
- <div id="ifTest">
- <div v-if="a == 1">第一个</div>
- <div v-else-if="a == 2">第二个</div>
- <div v-else>最后一个</div>
- </div>
- <script>
- var vmIf = new Vue({
- el: "#ifTest",
- data:{
- a: 0,//默认设置为零
- }
- })
- </script>
因为默认a为0,前面几个条件都不满足,所以v-else生效:
然后我们模仿用户修改a的值
<ul>
<li v-for="(value,key) in 要遍历的对象或数组" :key="key">
{{value.对应的键名}}
</li>
</ul>
- <ul id="ulTest" >
- <li v-for="(obj,key) in peoples" :key="key">
- {{obj.name}}-{{obj.age}}-love:{{obj.love}}
- </li>
- </ul>
- <script>
- new Vue({
- el: "#ulTest",
- data:{
- peoples:[
- {name:"路飞",age: 23,love:"雏田"},
- {name:"鸣人",age: 19, love:"娜美"},
- {name:"萧炎",age: 22, love:"美杜莎"}
- ]
- }
- })
- </script>

效果:
- <button @click="addPeople">点我添加新人</button>
-
- ---------------------------
- methods:{
- addPeople(){
- var wang = {name:"老王",age: 22,love: "云韵"};
- //将新人推入数组,注意从前面进入
- this.peoples.unshift(wang);
- }
- }
这样还会连累无辜,导致出错,例如每个li中都加了一个输入框
- <li v-for="(obj,key) in peoples" :key="key">
- {{obj.name}}-{{obj.age}}-love:{{obj.love}}
- <input>
- </li>
加载完页面后,我们在输入框输入各自对应的数据,
然后点击添加新人错误出现:input内容全乱了!
原因:
- <div id="filterTest">
- <h1>列表搜索</h1>
- <!-- v-model绑定到Vue,让Vue监测到变化-->
- <input type="text" placeholder="请输入要搜索的关键字" v-model="inContent">
- <ul>
- <li v-for="value in needPeoples" :key="value.id">
- {{value.name}}--{{value.age}}--love:{{value.love}}
- </li>
- </ul>
- </div>
- <script>
- new Vue({
- el: "#filterTest",
- data:{
- inContent:"" ,//默认为空串
- peoples:[//数据源
- {id:"001",name:"路飞",age: 23,love:"雏田"},
- {id:"002",name:"鸣人",age: 19, love:"娜美"},
- {id:"003",name:"萧炎",age: 22, love:"美杜莎"},
- {id:"004",name:"老王",age: 22,love: "云韵"}
- ],
- needPeoples:[]
- },
- watch:{
- inContent:{
- immediate: true,
- //让函数开始就执行一次,即看是否包含空字符,肯定包含全部展示
- //创建数组处理后返回
- handler(val){
- var shuzu = [];
- //查看数据中的值是不是包含输入框中的值
- this.needPeoples = this.peoples.filter((p)=>{
- return p.name.includes(val);
- })
- }
- }
- }
- })
- </script>

- <div id="filterTest">
- <h1>列表搜索</h1>
- <!-- v-model绑定到Vue,让Vue监测到变化-->
- <input type="text" placeholder="请输入要搜索的关键字" v-model="inContent">
- <ul>
- <li v-for="value in needPeoples" :key="value.id">
- {{value.name}}--{{value.age}}--love:{{value.love}}
- </li>
- </ul>
- </div>
- <script>
- new Vue({
- el: "#filterTest",
- data:{
- inContent:"" ,//默认为空串
- peoples:[//数据源
- {id:"001",name:"路飞",age: 23,love:"雏田"},
- {id:"002",name:"鸣人",age: 19, love:"娜美"},
- {id:"003",name:"萧炎",age: 22, love:"美杜莎"},
- {id:"004",name:"老王",age: 22,love: "云韵"}
- ],
- },
- computed:{
- needPeoples:{
- get(){
- return this.peoples.filter((p)=>{
- return p.name.includes(this.inContent);
- })
- }
- }
- }
- })
- </script>

- <div id="filterTest">
- <h1>列表搜索</h1>
- <!-- v-model绑定到Vue,让Vue监测到变化-->
- <input type="text" placeholder="请输入要搜索的关键字" v-model="inContent">
- <button @click="sortType = 1" >年龄正序</button>
- <button @click="sortType = 2">年龄逆序</button>
- <button @click="sortType = 0">原顺序</button>
- <ul>
- <li v-for="value in needPeoples" :key="value.id">
- {{value.name}}--{{value.age}}--love:{{value.love}}
- </li>
- </ul>
- </div>
- <script>
- new Vue({
- el: "#filterTest",
- data:{
- sortType: 0,
- inContent:"" ,//默认为空串
- peoples:[//数据源
- {id:"001",name:"路飞",age: 23,love:"雏田"},
- {id:"002",name:"路阳",age: 34,love:"雏田"},
- {id:"003",name:"花路",age: 12,love:"雏田"},
- {id:"004",name:"鸣炮",age: 23,love:"雏田"},
- {id:"005",name:"鸣人",age: 19, love:"娜美"},
- {id:"006",name:"萧炎",age: 22, love:"美杜莎"},
- {id:"007",name:"老王",age: 13,love: "云韵"}
- ],
- },
- computed:{
- needPeoples:{
- //每当计算变量依赖的Vue变量发生变化,getter都会再次执行
- get(){
- //先用变量承接,以后排序在此基础上进行,保证在搜索中的数据排序
- const arrMe = this.peoples.filter((p)=>{
- return p.name.includes(this.inContent);
- });
- //在这里判断排序的类型0为正常顺序,1为正序,2为逆序
- //判断,默认为0即为false,不会执行排序,即原顺序
- if(this.sortType){
- arrMe.sort((a,b)=>{
- return (this.sortType == 1)? b.age - a.age:a.age - b.age;
- })
- }
- //记得返回
- return arrMe;
- }
- }
- }
- })
- </script>

- <!-- Vue数据监测测试,作如下结构-->
- <div id="seeText">
- <ul>
- <li>{{people.name}}--{{people.age}}</li>
- </ul>
- </div>
- </body>
- <script>
- var vm =new Vue({
- el:"#seeText",
- data:{
- people:{
- name:"路飞",
- age: 34
- }
- }
- })

3.上面的数据在生成页面之后people对象中间的数据都交给了vm实例管理,对象中的各个属性也都被数据劫持,增加了对应的getter和setter,以实现响应式(响应式就是当people中的数据改变时就会调用setter,setter中会引起整个模版用到该属性的位置重新加载。所以对象的属性拥有setter和getter很重要,这也是属性被Vue实例监测的重要条件。
- <!-- Vue数据监测测试,作如下结构-->
- <div id="seeText">
- <ul>
- <li>{{people[0]}}--{{people[1]}}</li>
- </ul>
- </div>
- </body>
- <script>
- var vm =new Vue({
- el:"#seeText",
- data:{
- people:["路飞",34]
- }
- })
- </script>
- <!-- Vue数据监测测试,作如下结构-->
- <div id="seeText">
- <ul>
- <li>{{people.name}}--{{people.age}}--{{people.love}}</li>
- </ul>
- </div>
- </body>
- <script>
- var vm =new Vue({
- el:"#seeText",
- data:{
- people:{name:"路飞",age:34}
- }
- })
- </script>
加载完页面如下:
我们模仿用户在vm中添加love属性。
添加完后,love的数据并没有被解析,这说明数据虽然添加了,但是Vue并没有发现属性值的增加,而新添加的属性也绝没有setter和getter。
- <body>
- <!-- Vue数据监测测试,作如下结构-->
- <div id="seeText">
- <ul>
- <li>{{people[0]}}--{{people[1]}}--{{people[2]}}</li>
- </ul>
- </div>
- </body>
- <script>
- var vm =new Vue({
- el:"#seeText",
- data:{
- people:["路飞",34]
- }
- })
- </script>

应使用语句:
修改值,使用splice函数
vm._data.people.splice(0,1,"鸣人");
增加值,使用push();
可见都修改成功
应使用语句
格式:
Vue.set(要添加属性的对象,要添加或修改的属性,属性值);
或者
vm.$set((要添加属性的对象,要添加或修改的属性,属性值);
具体:
vm.$set(vm._data.people,"love","雏田");
Vue.set(vm._data.people,"love","雏田");
-
- <!-- 阻止默认行为 -->
- <form id="formGet" @submit.prevent="printInfo">
- 账号:<input type="text" v-model="custer"><br>
- 密码:<input type="password" v-model="pass"><br>
- 性别:<!--因为v-model自动同步的是value值,而单选框没有输入所以要指定-->
- 男<input type="radio" v-model="sex" name="sex" value="male">
- 女<input type="radio" v-model="sex" name="sex" value="female"><br>
- 兴趣:
- 打篮球<input type="checkbox" v-model="inster" value="basketball">
- 跳舞<input type="checkbox" v-model="inster" value="dance">
- 下棋<input type="checkbox" v-model="inster" value="chess"><br>
- 选择城市:
- <select v-model="city">
- <option value="shanghai">上海</option>
- <option value="beijing">北京</option>
- <option value="shenzhen">深圳</option>
- <option value="zhengzhou">郑州</option>
- </select><br>
- 其他信息:
- <textarea v-model="it"></textarea><br>
- <input type="checkbox" v-model="agree">是否同意协议<a>某某协议</a><br>
- 提交信息:<input type="submit">
- </form>
- <script>
- new Vue({
- el: "#formGet",
- data:{
- custer:"",
- pass: "",
- sex: "",
- inster: [],//这里注意因为多选框,所以要用数组接收,可能的多个值。
- city: "",
- it: "",
- agree: ""
- },
- methods:{
- printInfo(){
- //将收集到的信息打印到控制台,虽然_data有getter和setter但是转换成json的只有数据。
- console.log(JSON.stringify(this._data));
- }
- }
- })
- </script>

效果:
<input type="number" v-model.number="age">
这样的话收集到的数据都会转化为数值
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。