• Vue基础语法(插值、指令、过滤器、计算属性与监听属性)


    目录

    插值

     指令

     过滤器

     计算属性和监听属性

    Vue购物车结算案列 


    插值

        1.文本

        2.html

        3.属性

        4.class、style绑定

        5.表达式

    双大括号插值(Mustache语法):
    双大括号插值是Vue中最常用的插值语法,使用双大括号{{ }}将表达式包裹起来,表达式将会被求值后显示在HTML中。

    {{msg}}

     案列

    源码

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.7.6/vue.js"></script>
    6. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
    7. <title>插值</title>
    8. <style type="text/css">
    9. .f30{
    10. font-size: 30px;
    11. }
    12. </style>
    13. </head>
    14. <body>
    15. <div id="app">
    16. <p>文本</p>
    17. {{msg}}
    18. <p>thml解析</p>
    19. {{msg2}}<br>
    20. <b :class="msg3" v-html="msg2"></b>
    21. <p>表达式</p>
    22. {{num+1}}
    23. {{warn.substr(0,2)}}
    24. <input v-model="ok" />
    25. {{ok==1?'大聪明':'臭傻逼'}}
    26. </div>
    27. <script type="text/javascript">
    28. new Vue({
    29. el:"#app",
    30. data(){
    31. return {
    32. msg:'沸洋洋你个臭傻逼',
    33. msg2:'我可是懒大王',
    34. msg3:'f30',
    35. num:5,
    36. warn:'靓仔闪亮登场',
    37. ok:1
    38. };
    39. }
    40. });
    41. </script>
    42. </body>
    43. </html>

     指令

    在Vue中,指令是用于将特定行为应用于DOM元素的特殊属性。Vue提供了许多内置指令,可以用于处理常见的DOM操作和数据绑定

    v-bind插值:v-bind指令用于在HTML属性中插入动态的数据。可以简写为:。

    <img :src="imageSrc">

    上述代码中,:src将会把imageSrc变量的值作为src属性的值进行插值。

    v-on插值:v-on指令用于在HTML事件处理程序中插入动态的方法。可以简写为@。

    <button @click="handleClick">Click Me</button>

    上述代码中,@click将会将handleClick方法插入到click事件处理程序中。

    v-html插值:v-html指令用于将数据作为原始HTML插入到元素中。

    <div v-html="htmlString"></div>

    上述代码中,htmlString变量的值将会被作为原始HTML插入到

    元素之中。

    v-text插值:v-text指令用于替代双大括号插值,将指定的数据直接作为文本内容插入到元素中。

    <p v-text="message"></p>

    上述代码中,message变量的值将会作为

    元素的文本内容。
     

     

    源码

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.7.6/vue.js"></script>
    6. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
    7. <title>指令</title>
    8. </head>
    9. <div id="app">
    10. <P>v-if/v-else-if/v-else</P>
    11. <input v-model="score" /><br />
    12. <b v-if="score < 60">麻花佬</b>
    13. <b v-else-if="score >= 60 && score < 70">屌丝</b>
    14. <b v-else-if="score >= 70 && score < 80">叼毛</b>
    15. <b v-else-if="score >= 80 && score < 90">良好青年</b>
    16. <b v-else="">靓仔</b>
    17. 60以下 麻花佬
    18. 60-70 屌丝
    19. 70-80 叼毛
    20. 80-90 良好青年
    21. 90以上 靓仔
    22. <p>v-show</p>
    23. v-if与v-show的区别?<br>
    24. <b v-if="isSHow">展示</b>
    25. <b v-show="isSHow">展示</b>
    26. <p>v-for</p>
    27. <i v-for="a in arr">{{a}}&nbsp;&nbsp;</i>
    28. <i v-for="i,u in users">&nbsp;&nbsp;{{i}}</i>
    29. <select>
    30. <option v-for="h in hobby" :value="h.id">{{h.name}}</option>
    31. </select>
    32. <div id="" v-for="h in hobby">
    33. <input type="checkbox" name="hobby" :value="h.id" />{{h.name}}
    34. </div>
    35. <p>动态参数</p>
    36. <input v-model="evname" />
    37. <button v-on:[evname]="test">点我</button>
    38. </div>
    39. <body>
    40. <script type="text/javascript">
    41. new Vue({
    42. el:"#app",
    43. data(){
    44. return {
    45. score:88,
    46. isSHow:false,
    47. arr: [1, 2, 3, 4],
    48. users: [{
    49. name: 'sz', id: 1
    50. },{
    51. name: 'sd', id: 2
    52. },{
    53. name: 'sn', id: 3
    54. },{
    55. name: 'sb', id: 4
    56. }],
    57. hobby:[{
    58. name: '喜羊羊', id: 1
    59. },{
    60. name: '美羊羊', id: 2
    61. },{
    62. name: '沸羊羊', id: 3
    63. },{
    64. name: '懒大王', id: 4
    65. }],
    66. evname:'click'
    67. };
    68. }
    69. ,methods:{
    70. test(){
    71. //单击事件,双击事件
    72. alert('点我你试试!!!')
    73. }
    74. }
    75. });
    76. </script>
    77. </body>
    78. </html>

     过滤器

    Vue.js中,过滤器(Filters)是一种用于格式化文本输出的特殊函数。它可以应用于绑定表达式中的数据,在渲染过程中将数据转换为所需的格式。

     

    源码

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.7.6/vue.js"></script>
    6. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
    7. <script src="date.js" type="text/javascript" charset="utf-8"></script>
    8. <title>过滤</title>
    9. </head>
    10. <div id="app">
    11. <P>局部过滤器基本应用</P>
    12. {{msg}}<br />
    13. {{msg | filterA}}
    14. <P>局部过滤器串行使用</P>
    15. {{msg}}<br />
    16. {{msg | filterB}}
    17. <P>局部过滤器传参</P>
    18. {{msg | filterC(3,10)}}<br />
    19. <p>全局过滤器</p>
    20. {{time}}<br />
    21. {{time | fmtDateFilter}}
    22. </div>
    23. <body>
    24. <script type="text/javascript">
    25. Vue.filter('fmtDateFilter', function (value) {
    26. return fmtDate(value);
    27. });
    28. new Vue({
    29. el:'#app',
    30. filters:{
    31. 'filterA':function(v){
    32. return v.substring(0,6);
    33. },
    34. 'filterB':function(v){
    35. return v.substring(3,8);
    36. },
    37. 'filterC':function(v,begin,end){
    38. return v.substring(begin,end);
    39. }
    40. },
    41. data(){
    42. return {
    43. msg: '沸羊羊你个臭傻逼,俺可是懒大王',
    44. time:new Date()
    45. };
    46. }
    47. ,methods:{
    48. test(){
    49. //单击事件,双击事件
    50. alert('点我你试试!!!')
    51. }
    52. }
    53. });
    54. </script>
    55. </body>
    56. </html>

    date.js

    1. //Date类添加了一个新的实例方法format
    2. Date.prototype.format = function (fmt) {
    3. //debugger;
    4. var o = {
    5. "M+": this.getMonth() + 1, //月份
    6. "d+": this.getDate(), //
    7. "h+": this.getHours(), //小时
    8. "m+": this.getMinutes(), //
    9. "s+": this.getSeconds(), //
    10. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
    11. "S": this.getMilliseconds() //毫秒
    12. };
    13. if (/(y+)/.test(fmt))
    14. fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    15. for (var k in o)
    16. if (new RegExp("(" + k + ")").test(fmt))
    17. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    18. return fmt;
    19. };
    20. function fmtDate(date, pattern) {
    21. var ts = date.getTime();
    22. var d = new Date(ts).format("yyyy-MM-dd hh:mm:ss");
    23. if (pattern) {
    24. d = new Date(ts).format(pattern);
    25. }
    26. return d.toLocaleString();
    27. };

     计算属性和监听属性

    计算属性(Computed):计算属性是根据其他属性的值计算得出的属性,它会根据依赖的属性自动更新。

    监听属性(Watch):监听属性允许你在某个属性发生变化时执行自定义的逻辑。

     源码

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

    计算属性跟监听属性的区别

    计算属性和监听属性是Vue中用于处理数据变化的两种方法,它们的主要区别如下:

    1. 计算属性:

      • 计算属性是Vue中的一个特殊属性,用于定义一个依赖其他属性计算得来的属性。
      • 计算属性会根据它所依赖的属性的变化而自动重新计算,只有当依赖属性发生变化时,计算属性才会重新求值。
      • 计算属性的值会被缓存起来,只有当依赖的属性发生变化时,才会重新计算。
    2. 监听属性:

      • 监听属性是通过watch选项来定义的,用于监听某个属性的变化,并在属性变化时执行特定的逻辑。
      • 监听属性需要显式地定义监听函数,并在函数中处理属性变化时的逻辑。
      • 监听属性适用于需要监听并处理属性变化的情况,可以执行更复杂的逻辑,如异步操作或调用其他方法。

    总结来说,计算属性适用于通过其他属性计算得到的属性值,而监听属性适用于需要监听并处理属性变化的情况。计算属性会自动计算并缓存值,而监听属性需要显式地定义监听函数来处理属性变化。

    Vue购物车结算案列 

    结合我们当前学的内容简单的写一个结算

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.7.6/vue.js"></script>
    6. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
    7. <title>购物车</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <!-- 购物车内容 -->
    12. <table>
    13. <thead>
    14. <tr>
    15. <th>商品名称</th>
    16. <th>单价</th>
    17. <th>数量</th>
    18. <th>小计</th>
    19. </tr>
    20. </thead>
    21. <tbody>
    22. <tr v-for="(item, index) in cartItems" :key="index">
    23. <td>{{ item.name }}</td>
    24. <td>{{ item.price }}</td>
    25. <td>
    26. <button @click="decrement(index)">-</button>
    27. {{ item.quantity }}
    28. <button @click="increment(index)">+</button>
    29. </td>
    30. <td>{{ calculateSubtotal(item) }}</td>
    31. </tr>
    32. </tbody>
    33. <tfoot>
    34. <tr>
    35. <td colspan="3">总计:</td>
    36. <td>{{ calculateTotal() }}</td>
    37. </tr>
    38. </tfoot>
    39. </table>
    40. </div>
    41. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    42. <script>
    43. new Vue({
    44. el: '#app',
    45. data: {
    46. cartItems: [], // 购物车商品列表
    47. },
    48. methods: {
    49. // 减少数量
    50. decrement(index) {
    51. if (this.cartItems[index].quantity > 1) {
    52. this.cartItems[index].quantity--;
    53. }
    54. },
    55. // 增加数量
    56. increment(index) {
    57. this.cartItems[index].quantity++;
    58. },
    59. // 计算小计
    60. calculateSubtotal(item) {
    61. return item.price * item.quantity;
    62. },
    63. // 计算总计
    64. calculateTotal() {
    65. let total = 0;
    66. for (let i = 0; i < this.cartItems.length; i++) {
    67. total += this.cartItems[i].price * this.cartItems[i].quantity;
    68. }
    69. return total;
    70. }
    71. },
    72. mounted() {
    73. // 初始化购物车商品列表
    74. // 可以根据实际情况从后端获取数据,并将数据赋值给cartItems
    75. this.cartItems = [
    76. { name: 'ddv', price: 888, quantity: 1 },
    77. { name: '鹤顶红', price: 1888, quantity: 2 },
    78. { name: '奥里给', price: 8888, quantity: 3 },
    79. ];
    80. }
    81. });
    82. </script>
    83. </body>
    84. </html>

     

     

  • 相关阅读:
    7.Flink实时项目之独立访客开发
    Android 11 替换Launcher后导致近期任务无效
    yum命令详解。yum install安装卸载,yum配置仓库
    网络基础(数据链路层)
    学生信息系统(python实现)
    探秘STM32MDK:编译过程与文件类型解析
    2020年五一杯数学建模A题煤炭价格预测问题解题全过程文档及程序
    idea 快捷键 自己也可以修改
    Unity-2D游戏-打击感与敌人AI
    vscode中使用eslint+prettier的配置
  • 原文地址:https://blog.csdn.net/m0_74934282/article/details/133017711