习题链接
课程列表
玩一个小游戏,根据提示语句,按照顺序选中正确的字形成成语
举例:
提示:形容极其稀少
我们就要按照顺序点击"绝"、"无"、"仅"、"有"这几个字
最后点击确定进行判定是否正确
关键点
- this.$set()
- 在vue对于一个已经确认了长度的数组,在进行修改其下标对应的值的时候Vue是无法追踪这个变化
- 使用set在修改数组或对象指向的元素的时候,会触发Vue的响应式更新
- 语法this.$set(数组名,下标,其值);
- 全局方法Vue.set()和this.$set()效果一样
- 此处是扩展vue2使用的Object.defineProperty,vue3使用的proxy,拦截对象的访问,从而实现响应式
- filter
- filter是数组的一个方法,用来过滤数据的
- 语法就是 arr.filter((item,index)=>{需要返回的数据就返回true,不需要就返回false}) 这个方法不会修改原数组
- 此题我们根据tip,来获取到正确的成语是什么
- join转字符串
- join是数组的一个方法,将数组转为字符串
- 用法数组.join('连接字符串') 一般就放一个'',就是不适用任何规则去拼接
- 当我们点击了确定之后,我们需要将刚刚点击的单个汉字拼接起来与正确的成语进行比较
代码实现 && 完整的代码
- 完成第一件事情,按照题目要求完成getSingleWord函数
//TODO 点击文字后,在idiom从左到右第一个空的位置加上改文字 getSingleWord(val) { const index = this.idiom.indexOf(""); // 找到空字符的地方 if(index != -1) this.$set(this.idiom,index,val); // 使用this.$set() //若直接使用this.idiom[index] = val;数据是变化了,但页面没有变化 },
- 完成第二件事情,当我们点击了四个汉字之后就要进行判断操作了
confirm() { const aimWord = this.arr.filter(item=>{if(item.tip == this.tip) return true})[0].word; const word = this.idiom.join('') // 数组转字符串 if(aimWord == word) this.result = true; else this.result =false; }