• Vue模板语法上集(02)


    今日份分享内容:

    一、插值(该代码块会放在末尾一并展示)

    1、文本插值

    2、使用v-html指令用于输出html代码

    3、属性         HTML属性中的值应使用v-bind指令

     4、表达式

      5、class 样式绑定

    二、指令

    1、 v-if

    2、 v-show

     3、v-for:类似JS的遍历  

     三、过滤器

    .filter

    四、计算属性与监听器

    1、计算属性  computed:{}

    2、监听属性 watch:{}

     五、购物车案例


    一、插值(该代码块会放在末尾一并展示)

    1、文本插值

    {{msg}} 

    效果展示:

    2、使用v-html指令用于输出html代码

     

     所以需要添加v-html属性:

            

     运行效果展示:

    3、属性         HTML属性中的值应使用v-bind指令

     三种属性绑定值:

    value        直接输出值

    v-bind:value        引用定义的变量值

    :value                引用定义的变量值

    任意属性都可以引用定义的变量值 

     运行效果展示:

     4、表达式

    Vue提供了完全的JavaScript表达式支持

    截取字段: substring

    数值增加:+

    三元运算符: ?_:_

    字符串拼接: +

    如图所示:

    效果展示:

      5、class 样式绑定

    有两种方式:

    ①使用id标签(.)/ 类标签(#)

    效果展示:

     ②调用 定义的变量值

     这里注意的是,我们引用的自定义变量的值也是从前面定义的id标签里来的!

     效果展示:

     6、style绑定

    :style 

     效果展示:

    代码块展示:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>1、插值title>
    7. <style>
    8. .a{
    9. color: yellow;
    10. }
    11. style>
    12. head>
    13. <body>
    14. <div id="app">
    15. <p>文本插值p>
    16. {{msg}}<br/>
    17. <p>html页面转义p>
    18. <div v-html="htmlstr">div><br/>
    19. <p>v-bind 属性绑定p>
    20. <input value="值" /><br/>
    21. <input v-bind:value="aa" /><br/>
    22. <input :value="aa" />
    23. <p>vue中可以对变量进行二次处理(也可使用js语法)p>
    24. {{bb.substring(0,4)}}<br />
    25. {{cc + 4}}<br />
    26. {{dd ? '1':'0'}}<br />
    27. <span :id="ee + '1' ">书籍信息span>
    28. <p>class样式绑定p>
    29. <span class="a">我是一杯咖啡span>
    30. <span :class="ff">我是一杯咖啡span>
    31. <span :style="gg" >我是红色的咖啡span>
    32. div>
    33. body>
    34. <script type="text/jscript">
    35. /* 实例化一个vue */
    36. new Vue({
    37. el:"#app",
    38. data(){
    39. return{
    40. msg:"hello vue! 我是一杯咖啡",
    41. htmlstr:'文本内容',
    42. aa:'我是aa',
    43. bb:'hello world',
    44. cc:6,
    45. dd:false,
    46. ee:'book_',
    47. ff:'a',
    48. gg:'color:red;'
    49. }
    50. }
    51. })
    52. script>
    53. html>

    二、指令

     指的是带有“v-”前缀的特殊属性 

    1、 v-if

    v-if|v-else|v-else-if:根据其后表达式的bool值进行判断是否渲染该元素,

    他们只能是兄弟元素

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

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

     效果展示:

     

    2、 v-show

    面试题:

            v-show与v-if的区别?

     v-show与v-if类似,只是会渲染其身后表达式为false的元素,而且会给这样的元素添加css代码:style="display:none"。

     

     3、v-for:类似JS的遍历  

     遍历数组: v-for="item in items", items是数组,item为数组中的数组元素(可自定义变量名)

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

    下拉框模式:

    效果展示:

     多选框模式:

    效果展示:

    代码块展示:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>1、插值title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>v-ifp>
    11. 请输入分数:<input v-model="score" />
    12. 对应的结果:
    13. <span v-if="score<60">不及格span>
    14. <span v-else-if="score<70">合格span>
    15. <span v-else-if="score<80">span>
    16. <span v-else-if="score<90">优秀span>
    17. <span v-else-if="score<=100">优+span>
    18. <span v-else="">输入不合法span>
    19. <p>v-showp>
    20. 请输入结果:<input v-model="showflag" />
    21. <span v-show="showflag">show:展示与否span>
    22. <p>v-forp>
    23. <select>
    24. <option v-for="l in likes" :value="l.id">{{l.name}}option>
    25. select><br />
    26. <div v-for="l in likes" >
    27. <input type="checkbox" :value="l.id">{{l.name}}
    28. div>
    29. div>
    30. body>
    31. body>
    32. <script type="text/jscript">
    33. /* 实例化一个vue */
    34. new Vue({
    35. el:"#app",
    36. data(){
    37. return{
    38. score:0,
    39. showflag:false,/* 默认值为false */
    40. likes:[
    41. {id:1,name:'深夜网易云'},
    42. {id:2,name:'冲浪达人'},
    43. {id:3,name:'追剧达人'},
    44. {id:4,name:'梗王'}
    45. ]
    46. }
    47. }
    48. })
    49. script>
    50. html>

     三、过滤器

    .filter

     

     在过滤器中也可以进行截取:

     效果展示:

    过滤器的串联:同时运行两个过滤器

    效果展示:

     

    代码块展示:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>1、插值title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>过滤器p>
    11. {{msg|strSplit|strSplit2}}
    12. div>
    13. body>
    14. body>
    15. <script type="text/jscript">
    16. /* 过滤器 */
    17. Vue.filter('strSplit',function(value){
    18. debugger;
    19. console.log(value);
    20. return value.substring(2,6);
    21. })
    22. Vue.filter('strSplit2',function(value){
    23. debugger;
    24. console.log(value);
    25. return value.substring(2,3);
    26. })
    27. /* 实例化一个vue */
    28. new Vue({
    29. el:"#app",
    30. data(){
    31. return{
    32. msg:'hello vue! 我是一杯咖啡'
    33. }
    34. }
    35. })
    36. script>
    37. html>

    四、计算属性与监听器

    1、计算属性  computed:{}

     计算属性可用于快速计算视图(View)中显示的属性。这些计算将被缓存,并且只在需要时更新

    效果展示:

     

     当我任意输入一个数字的时候:

    2、监听属性 watch:{}

     监听属性 watch,我们可以通过 watch 来响应数据的变化

    效果展示:

    默认值为0时:

     

     设置值时:

     代码块展示:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>4、计算属性与监听属性title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>计算属性p>
    11. 请输入第一个数:<input v-model="x" /><br>
    12. 请输入第二个数:<input v-model="y" /><br>
    13. 结果为:{{addFlag}}
    14. <p>监听属性p>
    15. 请输入第km数:<input v-model="km" /><br>
    16. 请输入第m数:<input v-model="m" /><br>
    17. div>
    18. body>
    19. body>
    20. <script type="text/jscript">
    21. /* 实例化一个vue */
    22. new Vue({
    23. el:"#app",
    24. data(){
    25. return{
    26. // 设置默认值
    27. x:0,
    28. y:0,
    29. km:0,
    30. m:0
    31. }
    32. },computed:{
    33. // 计算属性
    34. addFlag:function(){
    35. return parseInt(this.x) + parseInt(this.y)
    36. }
    37. },watch:{
    38. km:function(v){
    39. // :(冒号)之前对应的是被监听的属性,v指的是被监听属性的值
    40. // 当v对弈的值发生变化的时候,会执行这个方法
    41. // v代表的是km
    42. // km = m*1000
    43. this.m = parseInt(v)*1000
    44. },
    45. m:function(v){
    46. // m = km/1000
    47. this.km = parseInt(v)/1000;
    48. }
    49. }
    50. })
    51. script>
    52. html>

    计算属性:一方影响另一方
    监听属性:相互影响

    小结:计算属性和监听属性的区别

             自己的理解

             computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理;

             computed比较适合对多个变量或者对象进行处理后返回一个结果值,也就是数多个变量中的某一个值发生了变化则我们监控的这个值也就会发生变化,

             举例:购物车里面的商品列表和总金额之间的关系,只要商品列表里面的商品数量发生变化,或减少或增多或删除商品,总金额都应该发生变化。这里的这个总金额使用computed属性来进行计算是最好的选择。

             与watch之间的区别:

        刚开始总是傻傻分不清到底在什么时候使用watch,什么时候使用computed。这里大致说一下自己的理解:

             watch主要用于监控vue实例的变化,它监控的变量当然必须在data里面声明才可以,它可以监控一个变量,也可以是一个对象,

            那么对比一下,我们很容易得出computed(计算属性)和watch(监听属性)都存在缓存机制的,性能都处优先选择,那么这两者哪个更好呢?

            上述很容易得出监听属性比计算属性复杂的多!因此在一个项目同时可以使用计算属性,methods和监听属性实现时候我们优先使用计算属性其次是监听属性,最后选择methods!

     五、购物车案例

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>1、插值title>
    7. <style>
    8. .a{
    9. color: yellow;
    10. }
    11. style>
    12. head>
    13. <body>
    14. <div id="app">
    15. <table >
    16. <tr>
    17. <td>物品td>
    18. <td>单价td>
    19. <td>数量td>
    20. <td>小计td>
    21. tr>
    22. <tr>
    23. <td>帽子td>
    24. <td>
    25. {{maozidanjia}}
    26. td>
    27. <td>
    28. <input v-model="maozishuliang" />
    29. td>
    30. <td>{{moazixiaoji}}td>
    31. tr>
    32. <tr>
    33. <td>衣服td>
    34. <td>
    35. {{yifudanjia}}
    36. td>
    37. <td>
    38. <input v-model="yifushuliang" />
    39. td>
    40. <td>{{yifuxiaoji}}td>
    41. tr>
    42. <tr>
    43. <td>裤子td>
    44. <td>
    45. {{kuzidanjia}}
    46. td>
    47. <td>
    48. <input v-model="kuzishuliang" />
    49. td>
    50. <td>{{kuzixioaji}}td>
    51. tr>
    52. <tr>
    53. <td>总价{{zongjia}}td>
    54. <td colspan="3">td>
    55. tr>
    56. table>
    57. div>
    58. body>
    59. <script type="text/jscript">
    60. /* 实例化一个vue */
    61. new Vue({
    62. el:"#app",
    63. data(){
    64. return{
    65. maozidanjia:20,
    66. yifudanjia:299,
    67. kuzidanjia:199,
    68. maozishuliang:1,
    69. yifushuliang:1,
    70. kuzishuliang:1
    71. }
    72. },computed:{
    73. // 因为数量 会影响小计,小计不会影响数量,所以使用计算属性
    74. moazixiaoji:function(){
    75. return parseInt(this.maozidanjia) * parseInt(this.maozishuliang);
    76. },yifuxiaoji:function(){
    77. return parseInt(this.yifudanjia) * parseInt(this.yifushuliang);
    78. },kuzixioaji:function(){
    79. return parseInt(this.kuzidanjia) * parseInt(this.kuzishuliang);
    80. },zongjia:function(){
    81. return parseInt(this.yifuxiaoji) + parseInt(this.moazixiaoji) + parseInt(this.kuzixioaji);
    82. }
    83. }
    84. })
    85. script>
    86. html>

    效果展示:

     

    更改数量之后: 

     

     OK,今天的内容就分享到此啦,希望本篇内容对您有所帮助!

    我们下期再见~

    下期内容【Vue语法模板下集】。

  • 相关阅读:
    VL812 USB3.0扩展坞设计教程
    【电源专题】LDO基础——热性能2
    Mac nginx安装,通过源码安装教程
    [Android][JAVA][kotlin] 获取各种语言的星期,月份,长月份,缩写月份
    嵌入式数据库是什么
    VUE:组件
    整合定位技术应对物联网碎片化场景应用
    新人FPGA验证书籍推荐
    【微信小程序】swiper的使用
    k8s安装——ubuntu
  • 原文地址:https://blog.csdn.net/m0_67094505/article/details/126668365