• 想掌握vue模板语法?两篇就够了!(上)


    目录

    一、插值 

    完整代码

    1.1 插值

    1.1.1 文本

     1.1.2 html

     1.1.3 属性

    ​1.1.4 表达式

     1.1.5 class绑定

    1.1.6 style绑定

     二、指令

     核心指令

    v-if|v-else|v-else-if

    代码:

    输出结果:

     v-show

     代码:

    输出结果

    v-for

     v-model,v-bind,v-on

     三、过滤器

    全局过滤器

    局部过滤器

    四、计算属性&监听属性

    计算属性

     监听属性

     购物车案例


    一、插值 

    完整代码

    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: aqua;
    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" />
    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+'id'">书籍信息span>
    28. <p>class绑定p>
    29. <span class="a">文本内容span>
    30. <span :class="classStr">文本内容span>
    31. <p>style 绑定p>
    32. <span :style="stylestr">文本内容span>
    33. div>
    34. body>
    35. <script type="text/javascript">
    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:true,
    46. idstr:'book_',
    47. classStr:'a',
    48. stylestr:'color:yellow'
    49. }
    50. }
    51. })
    52. script>
    53. html>

    1.1 插值

    1.1.1 文本

     {{msg}}

     打印结果

     1.1.2 html

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

    输出结果:

     1.1.3 属性

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

     

    输出结果:

     1.1.4 表达式

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

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

              {{ number + 1 }}

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

              

  • 我的Id是js动态生成的
  •  输出结果

     1.1.5 class绑定

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

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

    输出结果

    1.1.6 style绑定

    v-bind:style="expression"

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

     输出结果

     

     二、指令

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

     核心指令

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

    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. head>
    8. <body>
    9. <div id="app">
    10. <p>v-ifp>
    11. 请输入分数:<input v-model="score" /><br />
    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><br />
    19. div>
    20. div>
    21. body>
    22. <script type="text/javascript">
    23. new Vue({
    24. el: '#app',
    25. data() {
    26. return {
    27. score: 0
    28. }
    29. }
    30. })
    31. script>
    32. html>

    输出结果:

     

     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. div>
    14. body>
    15. <script type="text/javascript">
    16. new Vue({
    17. el: '#app',
    18. data() {
    19. return {
    20. showflag: false
    21. }
    22. }
    23. })
    24. script>
    25. html>

    输出结果

     showflag=false 时,v-show是会形成一个html串的而v-if是不行的, v-show通过display隐藏了,而v-if标签是直接没有了

    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. <br />
    15. <div v-for="l in likes">
    16. <input type="checkbox" :value="l.id" />{{l.name}}
    17. div>
    18. div>
    19. body>
    20. <script type="text/javascript">
    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. id: 5,
    43. name: '羽毛球'
    44. }
    45. ]
    46. }
    47. }
    48. })
    49. script>
    50. html>

     输出结果

    下拉框:

    复选框

     

     v-model,v-bind,v-on

    用来在 input、select、textarea、checkbox、radio 等表单控件元素上创建双向数据绑定,根据表单上的值,自动更新绑定的元素的值  

    v-for/v-model一起绑定[多选]复选框和单选框  

    此内容在上篇博客有讲解,如需要可观看上篇文章-http://t.csdn.cn/9nmoT

     三、过滤器

    全局过滤器

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

     // value 表示要过滤的内容

    });

    局部过滤器

    new Vue({

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

    });

    vue允许你自定义过滤器,被用作一些常见的文本格式化,格式如下:

    {{ name | capitalize }}

    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. {{msg|strSplit|strSplit2}}<br />
    11. {{msg|strSplit3(1,5)}}<br />
    12. {{msg|strSplit3(2,8)}}
    13. div>
    14. body>
    15. <script type="text/javascript">
    16. Vue.filter('strSplit',function(value){
    17. console.log(value);
    18. return value.substring(0,5);
    19. })
    20. Vue.filter('strSplit2',function(value){
    21. console.log(value);
    22. return value.substring(0,3);
    23. })
    24. Vue.filter('strSplit3',function(value,a,b){
    25. console.log(value);
    26. return value.substring(a,b);
    27. })
    28. new Vue({
    29. el: '#app',
    30. data() {
    31. return {
    32. msg:'hello vue!!!'
    33. }
    34. }
    35. })
    36. script>
    37. html>

    注1:过滤器函数接受表达式的值作为第一个参数

    注2:过滤器可以串联     

    {{ message | filterA | filterB }}

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

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

    四、计算属性&监听属性

    计算属性

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

       computed:{}

    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"/>
    12. 请输入第二个数:<input v-model="y"/>
    13. 结果为:{{addFlag}}
    14. div>
    15. body>
    16. <script type="text/javascript">
    17. new Vue({
    18. el: '#app',
    19. data() {
    20. return {
    21. x:0,
    22. y:0
    23. }
    24. },computed:{
    25. // 计算 属性
    26. addFlag:function(){
    27. return parseInt(this.x)+parseInt(this.y);
    28. }
    29. }
    30. })
    31. script>
    32. html>

    输出结果

     监听属性

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

       watch:{}

    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="km" /><br />
    12. 请输入米:<input v-model="m" />
    13. div>
    14. body>
    15. <script type="text/javascript">
    16. new Vue({
    17. el: '#app',
    18. data() {
    19. return {
    20. km: 0,
    21. m: 0
    22. }
    23. },
    24. watch: {
    25. km: function(v) {
    26. //:之前对应的是被监听的属性,v指的是被监听属性的值
    27. //当b对应的值发生变化的时候,会执行这个方法
    28. //v代表的是千米
    29. this.m = parseInt(v) * 1000
    30. },
    31. m: function(v) {
    32. //v代表的是米
    33. this.km = parseInt(v) / 1000;
    34. }
    35. }
    36. })
    37. script>
    38. 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. <table>
    11. <tr>
    12. <td>物品td>
    13. <td>单价td>
    14. <td>数量td>
    15. <td>小计td>
    16. tr>
    17. <tr>
    18. <td>衣服td>
    19. <td>
    20. {{yifuDanjia}}元
    21. td>
    22. <td>
    23. <input v-model="yifuShuliang" />
    24. td>
    25. <td>
    26. {{yifuXiaoji}}
    27. td>
    28. tr>
    29. <tr>
    30. <td>鞋子td>
    31. <td>
    32. {{xieziDanjia}}元
    33. td>
    34. <td>
    35. <input v-model="xieziShuliang" />
    36. td>
    37. <td>
    38. {{xieziXiaoji}}
    39. td>
    40. tr>
    41. <tr>
    42. <td>裤子td>
    43. <td>
    44. {{kuziDanjia}}元
    45. td>
    46. <td>
    47. <input v-model="kuziShuliang" />
    48. td>
    49. <td>
    50. {{kuziXiaoji}}
    51. td>
    52. tr>
    53. <tr>
    54. <td>总价td>
    55. <td colspan="3">{{zongJia}}td>
    56. tr>
    57. table>
    58. div>
    59. body>
    60. <script type="text/javascript">
    61. new Vue({
    62. el: '#app',
    63. data() {
    64. return {
    65. yifuDanjia: 2990,
    66. xieziDanjia: 17241,
    67. kuziDanjia: 300,
    68. yifuShuliang: 1,
    69. xieziShuliang: 1,
    70. kuziShuliang: 1
    71. }
    72. },
    73. computed: {
    74. //因为数量 会影响小计 不会影响数量,所有使用计算属性
    75. yifuXiaoji: function() {
    76. return parseInt(this.yifuDanjia) * parseInt(this.yifuShuliang);
    77. },
    78. xieziXiaoji: function() {
    79. return parseInt(this.xieziDanjia) * parseInt(this.xieziShuliang);
    80. },
    81. kuziXiaoji: function() {
    82. return parseInt(this.kuziDanjia) * parseInt(this.kuziShuliang);
    83. },
    84. zongJia: function() {
    85. return parseInt(this.kuziXiaoji) + parseInt(this.yifuXiaoji) + parseInt(this.xieziXiaoji);
    86. }
    87. }
    88. })
    89. script>
    90. html>

    运行结果:

  • 相关阅读:
    rk3588 香橙派 vncserver连接 图形界面远程登陆
    Mysql表的操作和数据类型
    PTA题目 计算工资
    Git获取本地仓库及基本操作指令
    基于SSM的新闻网站浏览管理实现与设计
    Java泛型方法与普通成员方法以及案例说明(五)
    mysql中慢sql处理方案
    牛客刷题系列之进阶版(组队竞赛,排序子序列,倒置字符串, 删除公共字符,修理牧场)
    vue使用el-date-picker(选择日期和时间)
    C++ 中 const 成员函数的本质
  • 原文地址:https://blog.csdn.net/weixin_65211978/article/details/126668752