computed问题
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1,user-scalable=0"> <title>调查问卷</title> <style type="text/css" media="screen"> .next{ width: 100px; height: 30px; background-color: green; color: white; font-size: 14px; border: none; position: absolute; bottom: 20px; left: 40px; } .last{ width: 100px; height: 30px; background-color: #abcdef; color: white; font-size: 14px; border: none; position: absolute; bottom: 20px; left: 160px; } .reset{ width: 100px; height: 30px; background-color: #abcdef; color: white; font-size: 14px; border: none; position: absolute; bottom: 20px; right: 40px; } .page1 form, .page2 form, .page3 form{ font-size: 30px; } .page2 input{ display: inline-block; width: 15px; height: 15px; } .page3 textarea{ width: 80%; height: 150px; text-indent: 20px; display: block; margin: 48px auto; } </style> </head> <body> <div id="app"> <page val="1" ref="abc" v-model="mainvalue" :everypage="pages" class="page1"> <h1>1.请问您的性别是?</h1> <form id="formtext1"> 男<input type="radio" name="sex" checked="checked"> 女<input type="radio" name="sex"> <btn :allpage="pages" v-model="mainvalue"></btn> </form> </page> <page val="2" ref="abc" v-model="mainvalue" :everypage="pages" class="page2"> <h1>2.请选择您的兴趣爱好:</h1> <form id="formtext2"> 看书<input type="checkbox" name="hobby" value="看书"><br/> 游泳<input type="checkbox" name="hobby" value="游泳"><br/> 跑步<input type="checkbox" name="hobby" value="跑步"><br/> 看电影<input type="checkbox" name="hobby" value="看电影"><br/> 听音乐<input type="checkbox" name="hobby" value="听音乐"><br/> <btn :allpage="pages" v-model="mainvalue"></btn> </form> <h3>请最少选择两个爱好!</h3> </page> <page val="3" ref="abc" v-model="mainvalue" :everypage="pages" class="page3"> <h1>3.请介绍一下自己:</h1> <form id="formtext3"> <textarea name="imf" placeholder="不少于100字" minlength="100" autofocus></textarea> <btn :allpage="pages" v-model="mainvalue"></btn> </form> </page> </div> <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.js"></script> <script src="https://cdn.bootcss.com/vue/2.5.13/vue.js"></script> <script src="btn.js"></script> <script src="page.js"></script> <script> var app = new Vue({ el: '#app', data: { mainvalue: '1', pages: [] }, methods: { update: function() { var this_page = this.$children.filter(function(item) { return item.$options.name === 'page'; }); this.$root.pages = this_page; console.log(this.pages); this.$refs.abc.appear(); } }, mounted() { this.update(); } }); </script> </body> </html>
Vue.component('page', { name: 'page', template: '\ <div class="page" v-show="show">\ <slot></slot>\ </div>', props: { val: { type: String }, value: { type: [String, Number] }, everypage: { type: Array } }, data() { return { show: false, pageList: [], currentValue: this.value, } }, methods: { appear: function() { var _this = this; this.pageList.forEach( function(item) { return item.show = item.val === _this.currentValue; }); } }, watch: { everypage: function(newval, oldval) { this.pageList = newval; this.appear(); }, value: function(newval, oldval) { this.currentValue = newval; } } });
Vue.component('btn', { name: 'btn', template: '\ <p class="container">\ <button type="submit" @click="toNext()" class="next" :able="able" @click.prevent>下一步</button>\ <button type="submit" @click="toLast()" class="last" @click.prevent>上一步</button>\ <button type="submit" @click="reSet()" class="reset" @click.prevent>重置</button>\ </p>', props: { allpage: { type: Array }, value: { type: [String, Number] } }, data() { return { thisValue: this.value } }, computed: { able: function() { if(this.$root.mainvalue === '2') { var hobbyBox = $('input[name=hobby]'); var hobbyList = []; for (var i = 0; i < hobbyBox.length; i++) { if (hobbyBox[i].checked) { hobbyList.push(hobbyBox[i].value); } } if(hobbyList.length < 2) { $('.page2 .container .next').css('background-color', 'red'); }else { $('.page2 .container .next').css('background-color', 'green'); } } } }, methods: { toNext: function() { if (this.$root.mainvalue === '2') { var hobbyBox = $('input[name=hobby]'); var hobbyList = []; for (var i = 0; i < hobbyBox.length; i++) { if (hobbyBox[i].checked) { hobbyList.push(hobbyBox[i].value); } } if (hobbyList.length > 2 || hobbyList.length === 2) { thisValue = String(Number(this.value) + 1); if (Number(this.$parent.currentValue) < 3) { this.$parent.currentValue = thisValue; this.$root.mainvalue = thisValue; this.$parent.appear(); } else { this.$parent.currentValue = '1'; this.$root.mainvalue = '1'; this.$parent.appear(); } } } else { thisValue = String(Number(this.value) + 1); if (Number(this.$parent.currentValue) < 3) { this.$parent.currentValue = thisValue; this.$root.mainvalue = thisValue; this.$parent.appear(); } else { this.$parent.currentValue = '1'; this.$root.mainvalue = '1'; this.$parent.appear(); } } }, toLast: function() { thisValue = String(Number(this.value) - 1); if (Number(this.$parent.currentValue) > 1) { this.$parent.currentValue = thisValue; this.$root.mainvalue = thisValue; this.$parent.appear(); } else { // thisValue = '0'; this.$parent.currentValue = '3'; this.$root.mainvalue = '3'; this.$parent.appear(); } }, reSet: function() { var formtext = document.getElementsByTagName('form'); if (event.target.parentNode.parentNode.id === 'formtext1') { document.getElementById('formtext1').reset(); } else if (event.target.parentNode.parentNode.id === 'formtext2') { document.getElementById('formtext2').reset(); } else { document.getElementById('formtext3').reset(); } } }, watch: { value: function(newval, oldval) { this.thisValue = newval; } } });
老师,这个VUE小程序里面我想实现在第二个调查问卷页面中选中2个或2个以上时按钮就能从红色变成绿色,但我这个地方不知道哪儿出问题了,非要点一次下一步按钮颜色才能变过去,麻烦老师帮我分析一下,computed中的方法不是实时计算的吗
1
收起
正在回答 回答被采纳积分+1
2回答
热门框架Vue开发WebApp 18版
- 参与学习 人
- 提交作业 209 份
- 解答问题 3299 个
本路径是通过ES6基础知识、运用Zepto、Swiper、fullPag等移动端常用工具包、以及当下流行框架Vue,结合多个实战案例,还原真实开发场景,最终实现手机端购物商城网页开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星