• Vue基础语法【上】


    目录

    前言

    一、插值

    1.文本插值

    2.html解析

    3.属性

    4.表达式

    5.截取

    6.三元运算符

    二、指令

    1.v-if

    2.v-for

    3.v-bind

    4.v-on

    5.v-if|v-else|v-else-if

    6.自定义指令

    三、过滤器

    1.局部过滤

    2.全局过滤

    四、计算属性与监听属性

    1.计算属性

    2.监听属性

    五、购物车案例


    前言

    Vue.js是一种用于构建用户界面的渐进式JavaScript框架。它的核心思想是将数据和视图进行分离,通过数据驱动视图的方式来构建交互式的Web应用程序。在本篇博文中,我们将介绍Vue的基础语法,帮助你快速入门Vue开发。

    一、插值

    1.文本插值

    使用双大括号{{}}将数据插入到文本中

    1. <span id="app">{{ msg}}</span>
    2. <script type="text/javascript">
    3. new Vue({
    4. el:"#app",
    5. data(){
    6. return{
    7. msg:"hello meinv"
    8. }
    9. }
    10. })
    11. </script>
    当msg变量的值发生变化时,DOM中的文本内容也会相应地更新。

    2.html解析

    如果要输出html格式的数据,需要使用v-html指令。

    1. <h1>html解析</h1>
    2. <b v-html="msg2"></b>

    3.属性

    1. <h1>属性</h1>
    2. <b :class="msg3" v-html="msg2"></b> <br>

    4.表达式

    1. <h1>表达式</h1>
    2. {{num+100}} <br>

    5.截取

    1. <h1>截取</h1>
    2. <h1>{{hh.substr(4,3)}}<br></h1>

    6.三元运算符

    1. <h1>三元运算判断</h1>
    2. <input v-model="ly"/>
    3. {{ly==1?"萝莉":"御姐"}}

    综合案例演示

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>插值</title>
    6. <!-- 导入工具 -->
    7. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
    8. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    9. <style type="text/css">
    10. .f30{
    11. font-size: 30px;
    12. color:green
    13. }
    14. </style>
    15. </head>
    16. <body>
    17. <!-- 定义边界 -->
    18. <div id="app">
    19. <h1>文本</h1>
    20. {{msg}} <br>
    21. <h1>html解析</h1>
    22. <b v-html="msg2"></b> <br>
    23. <h1>属性</h1>
    24. <b :class="msg3" v-html="msg2"></b> <br>
    25. <h1>表达式</h1>
    26. {{num+100}} <br>
    27. <h1>截取</h1>
    28. <h1>{{hh.substr(4,3)}}<br></h1>
    29. <h1>三元运算判断</h1>
    30. <input v-model="ly"/>
    31. {{ly==1?"萝莉":"御姐"}}
    32. </div>
    33. <script type="text/javascript">
    34. new Vue({
    35. el:"#app",
    36. data(){
    37. return{
    38. msg:"hello meinv",
    39. msg2:" 卡拉米",
    40. msg3:"f30",
    41. num:100,
    42. hh:"无敌旋风美男子再次",
    43. ly:1
    44. }
    45. }
    46. })
    47. </script>
    48. </body>
    49. </html>

    二、指令

    指令是 Vue.js 中的一种特殊属性,以 v- 开头,后面跟着指令的名称。指令可以用在 HTML 元素上,用于绑定数据、事件等。Vue 内置了很多常用的指令,如 v-ifv-forv-bind 等,你也可以自定义指令来实现特定的功能。

    1.v-if

    v-if 指令用于条件渲染,根据表达式的值决定是否渲染一个元素。当表达式的值为真时,元素会被渲染;否则,元素不会被渲染。

    <div v-if="show">Hello, Vue!</div>
    

    2.v-for

    v-for 指令用于循环渲染,可以遍历数组或对象的属性。

      遍历数组: v-for="item in items", items是数组,item为数组中的数组元素

        遍历对象: v-for="(value,key,index) in stu", value属性值,key属性名,index下标

    1. <div v-for="(item, index) in items" :key="index">
    2. {{ item }}
    3. </div>

    3.v-bind

    v-bind 指令用于绑定属性,可以将数据绑定到元素的属性上。

    <img v-bind:src="imageSrc" />
    

    4.v-on

    v-on 指令用于绑定事件监听器,可以在元素上监听指定的事件。

    <button v-on:click="handleClick">点击我</button>
    

    5.v-if|v-else|v-else-if

    根据其后表达式的bool值进行判断是否渲染该元素,他们只能是兄弟元素

     v-else-if上一个兄弟元素必须是v-if, v-else上一个兄弟元素必须是v-if或者是v-else-if

    1. <p>v-if/v-else-if/v-else的使用</p>
    2. <input v-model="score"/><br>
    3. <b v-if="score < 60">该死</b>
    4. <b v-else-if="score >=60 && score <70 ">及格</b>
    5. <b v-else-if="score >=70 && score <80">不错</b>
    6. <b v-else-if="score >=80 && score <90">good</b>
    7. <b v-else="">666</b><br >

    案例

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>指令</title>
    6. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
    7. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    8. </head>
    9. <body>
    10. <!-- 定义边界 -->
    11. <div id="app">
    12. <h1>v-if/v-else-if/v-else的使用</h1>
    13. <input v-model="score"/><br>
    14. <b v-if="score < 60">该死</b>
    15. <b v-else-if="score >=60 && score <70 ">及格</b>
    16. <b v-else-if="score >=70 && score <80">还不错</b>
    17. <b v-else-if="score >=80 && score <90">good</b>
    18. <b v-else="">666</b><br >
    19. <h1>v-if 与v-show的区别</h1>
    20. <b v-if="isShow">我是v-if</b>
    21. <b v-show="isShow">我是v-show</b>
    22. <h1>v-for的使用</h1>
    23. <i v-for="u in users ">{{u}}&nbsp;</i>
    24. <h1>下拉框的使用</h1>
    25. <select>
    26. <option v-for=" u in users" :value="u.id">
    27. {{u.name}}
    28. </option>
    29. </select>
    30. <h1>复选框的使用</h1>
    31. <div v-for="u in users" >
    32. <input type="checkbox" name="users" :value="u.id"/>{{u.name}}
    33. </div>
    34. </div>
    35. <script type="text/javascript">
    36. new Vue({
    37. el:"#app",
    38. data(){
    39. return{
    40. score:99,
    41. isShow:false,
    42. users:[{
    43. name:"死仔",id:1
    44. },{
    45. name:"你在哪",id:2
    46. },{
    47. name:"四季花",id:3
    48. }]
    49. }
    50. }
    51. })
    52. </script>
    53. </body>
    54. </html>

     

    6.参数

              一些指令能够接收一个“参数”,在指令名称之后以冒号表示

    <a v-bind:href="url">...</a>

    动态参数

              从2.6.0开始,可以用方括号括起来的JavaScript表达式作为一个指令的参数

      <a v-bind:[attrname]="url"> ... </a>

    案例:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>参数title>
    6. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js">script>
    7. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    8. head>
    9. <body>
    10. <div id="app">
    11. <h1>动态参数h1>
    12. <input v-model="evname"/>
    13. <button v-on:[evname]="test">点我button>
    14. div>
    15. <script type="text/javascript">
    16. new Vue({
    17. el:"#app",
    18. data(){
    19. return{
    20. evname:"click"
    21. }
    22. },
    23. methods:{
    24. test(){
    25. alert("快点我,快快");
    26. }
    27. }
    28. });
    29. script>
    30. body>
    31. html>

    6.自定义指令

    除了内置指令外,你还可以根据需求自定义指令。自定义指令的方法如下:

    1.使用 Vue.directive() 方法注册一个新的全局指令:

    1. Vue.directive('focus', {
    2. // bind 钩子函数
    3. bind: function (el) {
    4. // 聚焦元素的逻辑(如设置 tabIndex)
    5. el.focus();
    6. },
    7. });
    2.在组件中使用自定义指令:
    
    1. <input v-focus />

    三、过滤器

    过滤器是 Vue.js 中的一种特殊属性,以 v- 开头,后面跟着过滤器的名称。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式。过滤器的作用是对数据进行处理,然后返回处理后的结果。Vue 内置了很多常用的过滤器,如 datelowercaseuppercase 等,你也可以自定义过滤器来实现特定的功能。

    1.局部过滤

    1. <h1>局部过滤器基本应用h1>
    2. {{msg | filterA}}
    3. <h1>局部过滤器串行使用--交并集h1>
    4. {{msg}}<br>
    5. {{msg | filterA}}<br>
    6. {{msg | filterA|filterB}}<br>
    7. <h1>局部过滤器传参h1>
    8. {{msg | filterC(2,6)}}

    2.全局过滤

    1. <h1>全局过滤</h1>
    2. <h1> {{time}}<br /></h1><hr >
    3. <h1> {{time|fmtDataFilter}}</h1>

    完整案例

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>过滤器</title>
    6. <!-- 导入工具 -->
    7. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
    8. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    9. <script src="date.js" type="text/javascript" charset="utf-8"></script>
    10. </head>
    11. <body>
    12. <!-- 定义边界 -->
    13. <div id="contect">
    14. <!-- <h1>局部过滤器基本应用</h1>
    15. {{msg | filterA}}
    16. <h1>局部过滤器串行使用--交并集</h1>
    17. {{msg}}<br>
    18. {{msg | filterA}}<br>
    19. {{msg | filterA|filterB}}<br>
    20. <h1>局部过滤器传参</h1>
    21. {{msg | filterC(3,6)}} -->
    22. <h1>全局过滤</h1>
    23. <h1> {{time}}<br /></h1><hr >
    24. <h1> {{time|fmtDataFilter}}</h1>
    25. </div>
    26. <script type="text/javascript">
    27. Vue.filter('fmtDataFilter',function(value){
    28. return fmtDate(value);
    29. });
    30. new Vue({
    31. el:"#contect",
    32. filters:{
    33. 'filterA':function(msg){
    34. return msg.substring(2,4);
    35. },
    36. 'filterB':function(msg){
    37. return msg.substring(2,4);
    38. },
    39. 'filterC':function(msg,begin,end){
    40. return msg.substring(begin,end);
    41. }
    42. },
    43. data(){
    44. return{
    45. msg:"局部过滤器",
    46. time:new Date()
    47. }
    48. }
    49. })
    50. </script>
    51. </body>
    52. </html>

    四、计算属性与监听属性

    1.计算属性

    1. <h1>计算属性:</h1>
    2. 单价:<input v-model="price"/>
    3. 数量:<input v-model="num"/>
    4. 小计:{{count}}<br />

    2.监听属性

    1. 监听属性:<br />
    2. 千米:<input v-model="km" /><br />
    3. 米:<input v-model="m"/>

    案例

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>计算属性和监听属性</title>
    6. <!-- 导入工具 -->
    7. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
    8. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    9. </head>
    10. <body>
    11. <!-- 定义边界 -->
    12. <div id="contect">
    13. <h1>计算属性:</h1>
    14. 单价:<input v-model="price"/>
    15. 数量:<input v-model="num"/>
    16. 小计:{{count}}<br />
    17. 监听属性:<br />
    18. 千米:<input v-model="km" /><br />
    19. 米:<input v-model="m"/>
    20. </div>
    21. <script type="text/javascript">
    22. new Vue({
    23. el:"#contect",
    24. data(){
    25. return{
    26. price:199,
    27. num:1,
    28. m:1000,
    29. km:1
    30. };
    31. },
    32. computed:{//计算属性
    33. count:function(){
    34. return this.price * this.num
    35. }
    36. },
    37. watch:{//监听属性
    38. km:function(kmm){
    39. this.m=parseInt(kmm)*1000
    40. },
    41. m:function(kmm){
    42. this.km=parseInt(kmm)/1000
    43. }
    44. }
    45. })
    46. </script>
    47. </body>
    48. </html>

    五、购物车案例

    先看效果

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    7. <title>cart</title>
    8. <style type="text/css">
    9. table {
    10. border: 1px solid #e9e9e9;
    11. border-collapse: collapse;
    12. border-spacing: 0;
    13. }
    14. th, td {
    15. padding: 8px 16px;
    16. border: 1px solid #e9e9e9;
    17. text-align: left;
    18. }
    19. th {
    20. background-color: #f7f7f7;
    21. color: #5c6b77;
    22. font-weight: 600;
    23. }
    24. img {
    25. width: 50px;
    26. height: 50px;
    27. }
    28. </style>
    29. </head>
    30. <body>
    31. <div id="app">
    32. <div v-if="barbecue.length">
    33. <!--如果页面有数据存在,则显示,无则。。-->
    34. <table>
    35. <thead>
    36. <tr>
    37. <th></th>
    38. <th>美女五折限购</th>
    39. <th>服务</th>
    40. <th>价格</th>
    41. <th>个数</th>
    42. <th>操作</th>
    43. </tr>
    44. </thead>
    45. <tbody>
    46. <tr v-for="(item, index) in barbecue">
    47. <td>{{item.id}}</td>
    48. <td>
    49. <img :src="item.image" alt="">
    50. {{item.name}}
    51. </td>
    52. <td>
    53. <select>
    54. <option v-for="fuwu in softmeinv">
    55. {{fuwu}}
    56. </option>
    57. </select>
    58. </td>
    59. <td>{{item.price | showPrice}}</td>
    60. <td>
    61. <button @click="decrement(index)" :disabled="item.count <= 1">-</button>
    62. <input type="number" v-model.number="item.count" @change="updateItem(index)" />
    63. <button @click="increment(index)">+</button>
    64. </td>
    65. <td><button @click="removeHandle(index)">移除</button></td>
    66. </tr>
    67. </tbody>
    68. </table>
    69. <h2>总价格:{{totalPrice | showPrice}}</h2>
    70. </div>
    71. <h2 v-else>购物车为空!</h2>
    72. </div>
    73. <script type="text/javascript">
    74. const app = new Vue({
    75. el: "#app",
    76. data() {
    77. return {
    78. barbecue: [
    79. {
    80. name: '美国美女',
    81. id: 1,
    82. image: 'image/1.jpg',
    83. price: 10,
    84. count: 1
    85. },
    86. {
    87. name: '日本美女',
    88. id: 2,
    89. image: 'image/2.jpg',
    90. price: 15,
    91. count: 1
    92. },
    93. {
    94. name: '中国美女',
    95. id: 3,
    96. image: 'image/3.jpeg',
    97. price: 3,
    98. count: 1
    99. },
    100. {
    101. name: '韩国美女',
    102. id: 4,
    103. image: 'image/4.jpg',
    104. price: 13,
    105. count: 1
    106. },
    107. ],
    108. softmeinv: ['健身丸', '403房', '逛街', '牵手', 'kiss kiss', '抱抱', '旅游','游乐场','大草原']
    109. }
    110. },
    111. methods: {
    112. decrement(index) {
    113. this.barbecue[index].count--
    114. },
    115. increment(index) {
    116. this.barbecue[index].count++
    117. },
    118. removeHandle(index) {
    119. this.barbecue.splice(index, 1)//移除对应的下标行
    120. }
    121. },
    122. filters: {
    123. showPrice(price) {
    124. return '¥' + price.toFixed(2)
    125. }
    126. },
    127. computed: {
    128. totalPrice() {
    129. // 一般遍历写法
    130. let totalPrice = 0
    131. for (let i = 0; i < this.barbecue.length; i++) {
    132. totalPrice += this.barbecue[i].price * this.barbecue[i].count
    133. }
    134. return totalPrice
    135. // //2.for in 写法
    136. // let totalPrice = 0
    137. // for (let i in this.barbecue) {
    138. // totalPrice += this.barbecue[i].price * this.barbecue[i].count
    139. // }
    140. // return totalPrice
    141. // //3.for of 写法
    142. // let totalPrice = 0
    143. // for (let item of this.barbecue) {
    144. // totalPrice += item.price * item.count
    145. // }
    146. // return totalPrice
    147. }
    148. },
    149. });
    150. </script>
    151. </body>
    152. </html>
  • 相关阅读:
    【跟踪算法汇总】
    TCP 四次挥手,可以直接变成三次?
    leetcode-121-买卖股票的最佳时机
    技术分享 | Jenkins通过什么方式报警?
    物联网AI MicroPython传感器学习 之 RGB三色灯
    【算法练习Day31】单调递增的数字&&买卖股票的最佳时机含手续费&&监控二叉树
    11-2 集合之Collection接口
    YOLO目标检测——红外人员数据集【含对应voc、coco和yolo三种格式标签+划分脚本】
    《我要进大厂》- Spring框架 夺命连环22问,你能坚持到第几问?(Spring高频问题)
    【博弈论】基础知识
  • 原文地址:https://blog.csdn.net/weixin_74268571/article/details/133023283