• Vue模块语法上(插值&指令&过滤器&计算属性-监听属性)


                                                                    文章目录

    一、插值

     1)文本

     2)html

     3)属性

     4)表达式

     5)class绑定

     6)style绑定

     二、指令

    1.v-if|v-else|v-else-if

    2.v-show

    3.v-for

    4.v-bind

    5.v-on

    6.v-model

    三、过滤器

    全局过滤器

    局部过滤器

    四、计算属性&监听属性

    计算属性 

    监听属性

    案例--购物车 


    一、插值

     1)文本

              {{msg}}

     2)html

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

         

     3)属性

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

     4)表达式

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

              {{str.substr(0,6).toUpperCase()}}

              {{ number + 1 }}

              {{ ok ? 'YES' : 'NO' }}

             

  • 我的Id是js动态生成的
  •  

       5)class绑定

               使用方式:v-bind:class="classStr"

               classStr的类型:字符串、数组、对象

       6)style绑定

               v-bind:style="styleStr"

               styleStr的类型:字符串、数组、对象

    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>title>
    7. <style>
    8. .a{
    9. color: yellow;
    10. }
    11. style>
    12. head>
    13. <body>
    14. <div id="app">
    15. <p>文本p>
    16. {{msg}}
    17. <p>html 页面转义p>
    18. <div v-html="htmlstr">div>
    19. <p>v-bind属性绑定p>
    20. <input value="值" />
    21. <input v-bind:value="valuestr" /><br />
    22. <input :value="valuestr" />
    23. <p>表达式 vue中可以对变量进行二次处理p>
    24. {{str.substring(0,4)}}<br />
    25. {{num + 4}}<br />
    26. {{ok ? '1' : 0}}<br />
    27. <span :id="idstr+'1'">书籍信息span>
    28. <p>class样式绑定p>
    29. <span :class="classStr">文本内容span>
    30. <p>style绑定p>
    31. <span :style="styleStr">文本内容span>
    32. div>
    33. body>
    34. <script type="text/javascript">
    35. /* 创建实例 */
    36. new Vue({
    37. el:'#app',
    38. data(){
    39. return {
    40. msg:'hello vue!!!',
    41. htmlstr:'文本内容',
    42. valuestr:'vue值',
    43. str:'hello world',
    44. num:6,
    45. ok:false,
    46. idstr:'book_',
    47. classStr:'a',
    48. styleStr:'color:blue'
    49. }
    50. }
    51. })
    52. script>
    53. html>

     二、指令

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

    核心指令

               (v-if|v-else|v-else-if)/v-show/v-for/v-bind/v-on/v-model)

    1.v-if|v-else|v-else-if

    根据其后表达式的bool值进行判断是否渲染该元素

                       他们只能是兄弟元素

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

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

    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>title>
    7. <style>
    8. .a{
    9. color: yellow;
    10. }
    11. style>
    12. head>
    13. <body>
    14. <div id="app">
    15. <p>v-ifp>
    16. 请输入分数:<input v-model="score" />
    17. 对应结果:
    18. <span v-if="score<60">不及格span>
    19. <span v-else-if="score<70">合格span>
    20. <span v-else-if="score<80">span>
    21. <span v-else-if="score<90">优秀span>
    22. <span v-else-if="score<=100">优++span>
    23. <span v-else="">输入不合法span>
    24. div>
    25. body>
    26. <script type="text/javascript">
    27. /* 创建实例 */
    28. new Vue({
    29. el:'#app',
    30. data(){
    31. return {
    32. score:0,
    33. }
    34. }
    35. })
    36. script>
    37. html>

     

    2.v-show

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

    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>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>v-showp>
    11. 请输入结果:<input v-model="showflag" />
    12. <span v-show="showflag">show展示与否span>
    13. <span v-if="showflag">if展示与否span>
    14. div>
    15. body>
    16. <script type="text/javascript">
    17. /* 创建实例 */
    18. new Vue({
    19. el:'#app',
    20. data(){
    21. return {
    22. showflag:false
    23. }
    24. }
    25. })
    26. script>
    27. html>

     

    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>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>v-forp>
    11. <select>
    12. <option v-for="l in likes" :value="l.id">{{l.name}}option>
    13. select>
    14. <div v-for="l in likes">
    15. <input type="checkbox" :value="l.id" />{{l.name}}
    16. div>
    17. div>
    18. body>
    19. <script type="text/javascript">
    20. /* 创建实例 */
    21. new Vue({
    22. el: '#app',
    23. data() {
    24. return {
    25. likes: [{
    26. id: 1,
    27. name: '军旗'
    28. },
    29. {
    30. id: 2,
    31. name: '乒乓球'
    32. },
    33. {
    34. id: 3,
    35. name: '篮球'
    36. },
    37. {
    38. id: 4,
    39. name: '羽毛球'
    40. }
    41. ]
    42. }
    43. }
    44. })
    45. script>
    46. html>

    4.v-bind:

    绑定属性

    5.v-on:

    绑定事件

    6.v-model:

    用来在 input、select、textarea、checkbox、radio 等表单控件元素上创建双向数据绑定,根据表单上的值,自动更新绑定的元素的值    v-for/v-model一起绑定[多选]复选框和单选框 

    它们三个详见上一期博客

    三、过滤器

    全局过滤器

    Vue.filter('filterName', function (value) {

     // value 表示要过滤的内容

    });

    局部过滤器

    new Vue({

     filters:{'filterName':function(value){}}

    });

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    7. head>
    8. <body>
    9. <div id="app">
    10. {{msg|all}},{{msg|single}},{{msg|all|single}},{{msg|param(4,5)}}
    11. div>
    12. body>
    13. <script type="text/javascript">
    14. // 全局过滤器
    15. Vue.filter('all', function(value) {
    16. return value.substring(1, 4);
    17. });
    18. // 绑定边界 ES6具体体现
    19. new Vue({
    20. el: '#app',
    21. data() {
    22. return {
    23. msg:"hello vue!!!"
    24. };
    25. },
    26. methods: {
    27. handle() {
    28. alert("触发事件");
    29. }
    30. },
    31. filters:{
    32. 'single':function(val){
    33. return val.substring(2,3);
    34. },
    35. 'param':function(val,start,end){
    36. return val.substring(start,end);
    37. }
    38. }
    39. })
    40. script>
    41. html>

    过滤器可以串联    

             {{ message | filterA | filterB }}

    过滤器是JavaScript函数,因此可以接受参数:

             {{ message | filterA('arg1', arg2) }}

    四、计算属性&监听属性

    计算属性 

    一方影响另一方,推动作用

    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>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. div>
    15. body>
    16. <script type="text/javascript">
    17. /* 创建实例 */
    18. new Vue({
    19. el:'#app',
    20. data(){
    21. return {
    22. /* 定义变量 */
    23. x:0,
    24. y:0
    25. }
    26. },computed:{
    27. /* 定义计算属性 */
    28. addFlag:function(){
    29. return parseInt(this.x) + parseInt(this.y);
    30. }
    31. }
    32. })
    33. script>
    34. html>

    监听属性

    相互影响

    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>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. 请输入千米:<input v-model="km" /><br />
    16. 请输入米:<input v-model="m" /><br />
    17. div>
    18. body>
    19. <script type="text/javascript">
    20. /* 创建实例 */
    21. new Vue({
    22. el:'#app',
    23. data(){
    24. return {
    25. /* 定义变量 */
    26. x:0,
    27. y:0,
    28. km:0,
    29. m:0
    30. }
    31. },computed:{
    32. /* 定义计算属性 */
    33. addFlag:function(){
    34. return parseInt(this.x) + parseInt(this.y);
    35. }
    36. },watch:{
    37. km:function(v){
    38. //冒号 :之前对应的是被监听的属性,v指的是被监听属性的值
    39. //当v对应的值发生变化的时候,会执行该方法
    40. //v代表千米
    41. this.m=parseInt(v)*1000;
    42. },
    43. m:function(v){
    44. this.km=parseInt(v)/1000;
    45. }
    46. }
    47. })
    48. script>
    49. html>

    案例--购物车 

    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>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>购物车p>
    11. <table border="1px;">
    12. <tr>
    13. <th>物品th>
    14. <th>单价th>
    15. <th>数量th>
    16. <th>小计th>
    17. tr>
    18. <tr>
    19. <th>帽子th>
    20. <th>
    21. {{mzDanjia}}
    22. th>
    23. <th>
    24. <input v-model="mzShuliang" />
    25. th>
    26. <th>{{mzXiaoji}}th>
    27. tr>
    28. <tr>
    29. <th>衣服th>
    30. <th>
    31. {{yfDanjia}}
    32. th>
    33. <th>
    34. <input v-model="yfShuliang" />
    35. th>
    36. <th>{{yfXiaoji}}th>
    37. tr>
    38. <tr>
    39. <th>裤子th>
    40. <th>
    41. {{kzDanjia}}
    42. th>
    43. <th>
    44. <input v-model="kzShuliang" />
    45. th>
    46. <th>{{kzXiaoji}}th>
    47. tr>
    48. <tr>
    49. <td>总价td>
    50. <td colspan="3">
    51. {{zongjia}}
    52. td>
    53. tr>
    54. table>
    55. div>
    56. body>
    57. <script type="text/javascript">
    58. /* 创建实例 */
    59. new Vue({
    60. el:'#app',
    61. data(){
    62. return {
    63. /* 定义变量 */
    64. mzDanjia:20,
    65. yfDanjia:3000,
    66. kzDanjia:700,
    67. mzShuliang:1,
    68. yfShuliang:1,
    69. kzShuliang:1
    70. }
    71. },computed:{
    72. //因为数量会影响小计,小计变化影响数量,所以使用计算属性
    73. mzXiaoji:function(){
    74. return parseInt(this.mzDanjia) * parseInt(this.mzShuliang);
    75. },
    76. yfXiaoji:function(){
    77. return parseInt(this.yfDanjia)*parseInt(this.yfShuliang);
    78. },
    79. kzXiaoji:function(){
    80. return parseInt(this.kzDanjia)*parseInt(this.kzShuliang);
    81. },
    82. zongjia:function(){
    83. return parseInt(this.yfXiaoji)+parseInt(this.kzXiaoji)+parseInt(this.mzXiaoji);
    84. }
    85. }
    86. })
    87. script>
    88. html>

     

     

  • 相关阅读:
    前缀和与树状数组(手撕算法篇)
    物联网毕业设计 - 基于单片机的高精度北斗定位控制终端
    【LeetCode 每日一题】7. 整数反转
    反序列化漏洞
    小工具——筛选图像小工具
    轻量封装WebGPU渲染系统示例<2>-彩色立方体(源码)
    STM8应用笔记6.3.8位定时器应用之三
    视频翻译字幕的软件哪个好?看完你就知道了
    论文阅读:Neural Graph Collaborative Filtering
    DOM&BOM
  • 原文地址:https://blog.csdn.net/weixin_67450855/article/details/126668354