表单、条件、循环指令,分隔符,前端数据库,过滤器,计算属性,监听属性,冒泡排序

1|0一、 表单指令

1|11. v-model = "变量"

  • v-model可以实现数据的双向绑定(即其变量所在的任何位置,只要变量的值改变,所有该变量的值都同时修改更新)

1|0(1)普通input框

  • 变量值就是value的值

1|0(2)单选input框

  • 变量值为多个单选框中,某一个value值

1|0(3)单一复选input框

  • 变量值为布尔,代表是否选中

1|0(4)多复选input框

  • 变量为数组,存放选中的选项的value

1|22. 实例

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>表单指令</title> </head> <body> <div id="app"> <!--表单指令: v-model="变量" 变量值与表单标签的value相关 v-model可以实现数据的双向绑定:v-model绑定的变量值可以影响表单标签的值,反过来单标签的值也可以影响变量的值 --> <form action=""> <!--重点--> <input type="text" name="usr" id="usr" placeholder="请输入账号" v-model="v1"> <input type="text" v-model="v1"> {{ v1 }} <hr> <!--1.单选框--> 男:<input type="radio" name="sex" value="male" v-model="v2"> 女:<input type="radio" name="sex" value="female" v-model="v2"> {{ v2 }} <hr> <!--2.单一复选框--> 卖身契:同意 <input type="checkbox" name="agree" v-model="v3"> {{ v3 }} <hr> <!--3.多复选框--> 爱好:<br> 男:<input type="checkbox" name="hobbies" value="male" v-model="v4"> 女:<input type="checkbox" name="hobbies" value="female" v-model="v4"> 哇塞:<input type="checkbox" name="hobbies" value="other" v-model="v4"> {{ v4 }} <hr> <button type="submit">提交</button> </form> </div> </body> <script src="js/vue.js"></script> <script> new Vue({ el: '#app', data: { v1: '123', v2: 'male', v3: false, v4: ['male', 'female'] } }) </script> </html>

2|0二、条件指令

2|11. v-show="布尔变量"

  • 当布尔变量的值为true时,显示并渲染本标签
  • 当布尔变量的值为false时,在浏览器上展示本标签,但隐藏渲染标签。(即标签含有 display:none 样式)

2|22. v-if="布尔变量"

  • 当布尔变量的值为true时,显示并渲染本标签

  • 当布尔变量的值为false时,在浏览器上的html代码中没有本标签。

2|33. v-if v-else-if v-else

  • v-if="布尔变量"的用法一致

2|44. 实例

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title></title> <style> [v-cloak] { display: none; } .box { width: 200px; height: 200px; } .r {background-color: red} .b {background-color: blue} .g {background-color: green} .active { background-color: deeppink; } </style> </head> <body> <div id="app" v-cloak> <!--条件指令: v-show="布尔变量" 隐藏时,采用display:none进行渲染 v-if="布尔变量" 隐藏时,不再页面中渲染(保证不渲染的数据泄露) ----------------------------- v-if | v-else-if | v-else --> <div class="box r" v-show="is_show"></div> <div class="box b" v-if="is_show"></div> <hr> <div class="wrap"> <div> <button @click="page='r_page'" :class="{active: page === 'r_page'}"></button> <button @click="page='b_page'" :class="{active: page === 'b_page'}"></button> <button @click="page='g_page'" :class="{active: page === 'g_page'}">绿</button> </div> <div class="box r" v-if="page === 'r_page'"></div> <div class="box b" v-else-if="page === 'b_page'"></div> <div class="box g" v-else></div> </div> </div> </body> <script src="js/vue.js"></script> <script> new Vue({ el: '#app', data: { is_show: false, page: 'r_page' } }) </script> </html>

3|0三、循环指令

3|11. v-for="变量 in 可迭代对象"

1|0(1)遍历字符串或数组

v-for="v in str|arr" <!--v为值--> v-for="(v, i) in str|arr" <!--v为值,i为索引-->

1|0(2)遍历对象(字典)

v-for="v in dic" <!--v为值--> v-for="(v, k) in dic" <!--v为字典的value,k为字典的key--> v-for="(v, k, i) in dic" <!--v为字典的value,k为字典的key,i为key的索引(对字典的key优化过了,所以有索引)-->

3|22. 实例

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>循环指令</title> </head> <body> <div id="app"> <!--循环指令: v-for="ele in string|array|obj" --> <span>{{ info }}</span> <hr> <i v-for="c in info">{{ c }} </i> <hr> <i v-for="(c, i) in info">{{i}}:{{c}}<br></i> <hr> <div v-for="e in stus">{{ e }}</div> <hr> <div v-for="(e, i) in stus">{{ i }}:{{ e }}</div> <hr> <div v-for="v in people">{{ v }}</div> <hr> <div v-for="(v, k, i) in people">{{ i }} - {{ k }}:{{ v }}</div> <hr> <div v-for="tea in teas"> <span v-for="(v, k, i) in tea"><span v-if="i !== 0"> | </span>{{ k }}:{{ v }}</span> </div> </div> </body> <script src="js/vue.js"></script> <script> new Vue({ el: '#app', data: { info: 'good good study', stus: ['Bob', 'Tom', 'Jerry'], people: { name: '猴子', age: 36.7, sex: '女', }, teas: [ { name: 'jason', age: 73, sex: '男', }, { name: 'egon', age: 74, sex: '男', }, { name: 'owen', age: 17.5, sex: '男', } ] } }) </script> </html>

4|0四、前端数据库

  • 前端浏览器都自带数据库,下面介绍两个前端的数据库

4|11. localStorage

  • 永久存储

1|0(1)字符串的存取

// 存 localStorage.变量名 = 变量值; // 取 localStorage.变量名

1|0(2)数组等其他类型数据的存取

  • 数组等类型需要先序列化成JSON
// 存 localStorage.数组名 = JSON.stringify(数组值); // 取 JSON.parse(localStorage.数组名) // 清空数据库 localStorage.clear();

5|02. sessionStorage

  • 临时存储(标签所属页面被关闭后,清空数据库)

1|0(1)字符串的存取

// 存 sessionStorage.变量名 = 变量值; // 取 sessionStorage.变量名

1|0(2)数组等其他类型数据的存取

  • 数组等类型需要先序列化成JSON
// 存 sessionStorage.数组名 = JSON.stringify(数组值); // 取 JSON.parse(sessionStorage.数组名) // 清空数据库 sessionStorage.clear();

5|13. for循环的案例

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>todo list 案例</title> <style> li:hover { color: red; cursor: pointer; } </style> </head> <body> <div id="app"> <input type="text" v-model="comment"> <button type="button" @click="send_msg">留言</button> <ul> <li v-for="(msg, i) in msgs" @click="delete_msg(i)">{{ msg }}</li> </ul> </div> </body> <script src="js/vue.js"></script> <script> new Vue({ el: '#app', data: { comment: '', msgs: localStorage.msgs ? JSON.parse(localStorage.msgs) : [], }, methods: { send_msg() { // 将comment添加到msgs数组中:unshift push 首尾增 | shift pop 首尾删 // this.msgs.push(this.comment); // 数组操作最全方法:splice(begin_index, count, ...args) // this.msgs.splice(0, 2); if (!this.comment) { alert('请输入内容'); return false; } this.msgs.push(this.comment); this.comment = ''; localStorage.msgs = JSON.stringify(this.msgs); }, delete_msg(index) { this.msgs.splice(index, 1); localStorage.msgs = JSON.stringify(this.msgs); } } }) </script> </html>

6|0五、分隔符

  • 分隔符就是当vue的插值语法即{{ }}与其他的框架的语法相冲突时,我们可以通过分隔符来修改vue的插值语法。
  • delimiters: ['[{', '}]'], // 修改插值表达式符号,将原来的 {{ }} 修改成 [{ }]
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="app"> {{ msg }} [{ msg }] </div> </body> <script src="js/vue.js"></script> <script> new Vue({ el: '#app', data: { msg: 'message' }, delimiters: ['[{', '}]'], // 修改插值表达式符号,将原来的 {{ }} 修改成 [{ }] }) </script> </html>

7|0六、过滤器

  • vue的过滤器都需要自己定义,但其自定义过滤器的方法非常简单

  • 自定义过滤器方法

    ''' 1、在filters成员中定义过滤器方法 2、可以对多个值进行过滤,过滤时还可以额外传入辅助参数 3、过滤的结果可以再进行下一次过滤(过滤的串联) 语法: {{ n1, n2 | f1(30) | f2 }} filters: { f1(n1,n2,n3) {return 过滤结果}, f2(f1的res) {return 过滤结果}, } '''
  • 实例

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>过滤器</title> </head> <body> <div id="app"> <!-- 总结: 1、在filters成员中定义过滤器方法 2、可以对多个值进行过滤,过滤时还可以额外传入辅助参数 3、过滤的结果可以再进行下一次过滤(过滤的串联) --> <p>{{ num | f1 }}</p> <p>{{ a, b | f2(30, 40) | f3 }}</p> </div> </body> <script src="js/vue.js"></script> <script> new Vue({ el: '#app', data: { num: 10, a: 10, b: 20, }, filters: { // 传入所有要过滤的条件,返回值就是过滤的结果 f1 (num) { console.log(num); return num * 10; }, f2 (a, b, c, d) { console.log(a, b, c, d); return a + b + c + d; }, f3 (num) { return num * num; } } }) </script> </html>

8|0七、计算属性

  • 用法和注意
''' 1、computed计算属性可以声明 方法属性(方法属性一定不能在data中重复声明) 2、方法属性 必须在页面中渲染,才会启用绑定的方法,方法属性的值就是绑定方法的返回值 3、绑定的方法中出现的所有变量都会被监听,任何一个变量的值变化、更新都会重新触发绑定方法,从而更新方法属性的返回值 一般用来解决的问题:一个变量值依赖于多个变量 '''
  • 实例
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="app"> <input type="number" min="0" max="100" v-model="n1"> <input type="number" min="0" max="100" v-model="n2"> <!--必须在页面上渲染--> <button>{{ result }}</button> </div> </body> <script src="js/vue.js"></script> <script> new Vue({ el: '#app', data: { n1: '', n2: '', // result: 0, // 不能在data中重复声明 }, computed: { result () { console.log('被调用了'); n1 = +this.n1; n2 = +this.n2; return n1 + n2; } } }) </script> </html>

9|0八、监听属性

  • 使用和注意
''' 1、监听的属性需要在data中声明,监听方法不需要返回值 2、监听的方法名就是监听的属性名,该属性值发生更新时就会回调监听方法 3、监听方法有两个回调参数:当前值,上一次值 解决的问题:多个变量值依赖于一个变量值 '''
  • 实例
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="app"> <p>姓名:<input type="text" v-model="full_name"></p> <p>姓:{{ first_name }}</p> <p>名:{{ last_name }}</p> </div> </body> <script src="js/vue.js"></script> <script> new Vue({ el: '#app', data: { full_name: '', first_name: '未知', last_name: '未知', }, watch: { // n是监听的属性当前值,o是其上一次的值,监听的属性值每次更新都会回调监听方法 full_name(n, o) { name_arr = n.split(''); this.first_name = name_arr[0]; this.last_name = name_arr[1]; }, } }) </script> </html>

10|0九、冒泡排序

  • 公式
// 按照分数进行排名 for (let i=0; i<可迭代对象.length-1; i++) { for (let j=0; j<可迭代对象.length-1-i; j++) { // 处理条件即可 if ( a>b ) { // 排序方式 // 交叉赋值,互换位置 a,b = b,a } } }
  • 实例
// 对数组排序 let arr = [3, 2, 5, 4, 1]; for (let i = 0; i < arr.length - 1; i++) { // 外层循环控制趟数 for (let j = 0; j < arr.length - 1 - i; j++) { // 内存循环控制比较次数 if (arr[j] > arr[j + 1]) { let temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } // 对字典排序 stus = [ { name: 'Bob', grade: 98 }, { name: 'Tom', grade: 87 }, { name: 'Jerry', grade: 92 }, ]; // 按照分数进行排名 for (let i=0; i<stus.length-1; i++) { for (let j=0; j<stus.length-1-i; j++) { // 处理条件即可 if (stus[j].grade > stus[j + 1].grade) { let temp = stus[j]; stus[j] = stus[j + 1]; stus[j + 1] = temp; } } }

__EOF__

本文作者BigSun丶
本文链接https://www.cnblogs.com/Mcoming/p/12056488.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   BigSun丶  阅读(512)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示