• Vue.js3学习篇--Vue模板应用


    目录

    一,模板基础

     1.模板插值

    (1)基础插值

    (2)HTML代码插值

    (3)标签属性插值

    2.模板指令

    (1)定义

    (2)指令参数

    二.条件渲染

    1.使用v-if指令渲染

    2.使用v-show指令渲染

    三.循环渲染

    1.v-for指令

    2.v-for指令的高级用法

    四.实战


    一,模板基础
     1.模板插值
    (1)基础插值

            用法:模板插值是Vue中基础的模板用法,一般在HTML的标签中用“{{}}”进行变量插值,其可以将当前组件中定义的变量的值插入指定位置,并且这种插值会默认实现绑定的效果,当我们修改变量的值时,其也可以同步反馈到页面的渲染上

    例如一个基础的Vue应用:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <script src="https://unpkg.com/vue@next">script>
    6. <title>Titletitle>
    7. head>
    8. <body>
    9. <div style="text-align: center" id="Application">
    10. <h1>{{count}}h1>
    11. <button v-on:click="clickButton">clickbutton>
    12. div>
    13. <script>
    14. const App={
    15. data(){
    16. return{
    17. count:0
    18. }
    19. },
    20. methods:{
    21. clickButton(){
    22. this.count=this.count+1
    23. }
    24. }
    25. }
    26. Vue.createApp(App).mount("#Application")
    27. script>
    28. body>
    29. html>

    效果:

    当我们点击按钮时,次数累加

            一般情况是,某些组件的渲染是由变量控制的,如果我们想让它一旦渲染后就不能够再被修改,这可以使用v-once指令实现,被这个指令设置的组件在进行变量插值时只会插值一次

    如果将上面的代码改为如下后,无论怎么点击按钮,标题都不改变:

    <h1 v-once>这里的渲染内容不会改变:{{count}}h1>
    (2)HTML代码插值

            还有,如果要插入的文本为一段HTML代码时,直接使用双括号时就不能实现效果,双括号会将里面的变量解析成纯文本,写的代码什么样,渲染时就渲染什么样,

    例如上面的例子定义App的数据:

    插值是一个HTML代码

    1. data(){
    2. return{
    3. count:0,
    4. countHTML:"0"
    5. }
    6. }

    插值位置:

      <h1>{{countHTML}}h1>

    再运行后,输出纯文本了:

            效果不是我们想的,对于HTML代码的插值,需要用v-html指令完成:

        <h1>模板内容:<span v-html="countHTML">span>h1>
    

    效果:

    (3)标签属性插值

            对于标签属性的插值,双括号同样不好使,而是需要使用v-bind指令

    例如:

    <h1 v-bind:id="test">属性插值{{count}}h1>

    定义一个CSS样式:

    1. #h1{
    2. color: blue;
    3. }

    然后在data中添加一个名为test的Vue组件属性:

    1. data(){
    2. return{
    3. count:0,
    4. countHTML:"0",
    5. test:"h1"
    6. }
    7. }

    运行代码后,之前定义的count插值变量得到了一个CSS属性h1:

    2.模板指令
    (1)定义

            本质上,Vue中的模板指令也是HTML属性标签,其通常由前缀“v-”开头,例如之前看到的v-on,v-html,v-bind等。某些特殊的Vue指令还可以指定参数,参数和指令使用冒号进行分隔,例如:

    1. v-bind:style
    2. v-on:click
    (2)指令参数

            还有就是指令的参数本身也可以是动态的,想换就换,例如定义一个区分id选择器和类选择器的组件样式,通过修改参数prop的值实现id选择器和类选择器之间的转换:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <script src="https://unpkg.com/vue@next">script>
    6. <title>Titletitle>
    7. <style>
    8. #h1{
    9. color: blue;
    10. }
    11. .h1{
    12. color: #3e8e41;
    13. }
    14. style>
    15. head>
    16. <body>
    17. <div style="text-align: center" id="Application">
    18. <h1>模板内容:<span v-html="countHTML">span>h1>
    19. <h1 v-bind:id="test">属性插值{{count}}h1>
    20. <h1 v-bind:[prop]="name" v-if="show">标题h1>
    21. <button v-on:click="clickButton">clickbutton>
    22. div>
    23. <script>
    24. const App={
    25. data(){
    26. return{
    27. count:0,
    28. countHTML:"0",
    29. test:"h1",
    30. show:true,
    31. prop:'class', //prop:'id'
    32. name:'h1'
    33. }
    34. },
    35. methods:{
    36. clickButton(){
    37. this.count=this.count+1
    38. }
    39. }
    40. }
    41. Vue.createApp(App).mount("#Application")
    42. script>
    43. body>
    44. html>

    当参数prop是class时:

    当参数prop是id时:

    实现了通过参数prop改变选择器类型

    (3)语法糖

            语法糖是指在不影响功能的情况下,添加某些方法实现同样的效果,说白了就是缩写,Vue的v-bind和v-on是比较常用的指令,使用它们都有自己的语法糖。

            对于v-bind指令,可以省略v-bind直接用冒号“:”,例如:

    1. <a v-bind:href="url">链接a>
    2. <img v-bind:src="imgUrl>

            对于v-on指令可以直接用“@”来缩写,例如:

    1. <button v-on:click="click">点击button>
    2. <button @click="click>点击

    二.条件渲染

            条件渲染是Vue控制HTML页面渲染的方式之一,一般通过v-if和v-show指令来实现

    1.使用v-if指令渲染

            简单使用:

    <h1 v-if="boolean">titleh1>

            上面的代码中boolean变量可以是布尔值有可以是条件语句,只有当boolean变量的值为真时或某个条件为真时当前标题元素才会被渲染,同时,if关键字还可以和else关键字结合使用组成if-else块

    1. <h1 v-if="boolean">titleh1>
    2. <p v-else>如果不显示title就显示段落p>

            注意的是,v-else要紧接v-if使用才能构成if-else块,例如下面的代码就会出错:

    1. <h1 v-if="boolean">titleh1>
    2. <h1>不构成if-else块h1>
    3. <p v-else>如果不显示title就显示段落p>

            在v-if和v-else之间,还可以插入任意多的v-else-if来实现多分支渲染,例如:

    1. <h1 v-if="score==100">满分h1>
    2. <h1 v-else-if="score>=80&&score!==100">优秀h1>
    3. <h1 v-else-if="score<80&&score>=60>及格
    4. 不及格

            如果想通过通过标签控制多个标签元素有如下两种实现方法:

    (1)使用div标签对要进行控制的元素进行包装:

    1. <div v-if="boolean">
    2. <p>1p>
    3. <p>2p>
    4. <p>3p>
    5. <p>4p>
    6. div>

    (2)使用template标签对元素进行分组:

    1. <template v-if="boolean">
    2. <p>ap>
    3. <p>cp>
    4. <p>bp>
    5. <p>dp>
    6. template>

            它们都实现同时控制多个标签元素的渲染,只不过div标签不是也会被渲染出来,而templa标签则不会被渲染出来,但其内控制的标签默认属性display:none不显示出来

    2.使用v-show指令渲染

            v-show指令的基本用法和v-if类似,不同的是v-show并不支持template模板,同样不可以和v-else结合使用,更加扯淡的是v-show无论条件的真假它都显示,v-show的渲染逻辑只是一种视觉上的渲染,它通常只是通过简单的切换CSS样式中的display属性来实现展示效果

    简单使用:

    <h1 v-show="boolean">titleh1>

    三.循环渲染

            循环渲染一般是用来渲染列表这一类组件

    1.v-for指令

            在Vue中,v-for指令可以将一个数组中的数据渲染为列表视图,数组的设置语法格式:

    1. item in list
    2. item of list

    类似于python中数组的语法,一个临时变量item循环迭代数组list

    例如:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <script src="https://unpkg.com/vue@next">script>
    6. <title>Titletitle>
    7. head>
    8. <body>
    9. <div>
    10. <div id="Application">
    11. <div v-for="item in list">
    12. {{item}}
    13. div>
    14. div>
    15. div>
    16. <script>
    17. const App={
    18. data(){
    19. return{
    20. list:[1,2,3,5,6,7]
    21. }
    22. }
    23. }
    24. Vue.createApp(App).mount("#Application")
    25. script>
    26. body>
    27. html>

    渲染结果:

    列表也可以是键值对,我们也可以获取列表的索引:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <script src="https://unpkg.com/vue@next">script>
    6. <title>Titletitle>
    7. head>
    8. <body>
    9. <div>
    10. <div id="Application">
    11. <div v-for="(key,value,index) in list">
    12. {{index}}-{{value}}:{{key}}
    13. div>
    14. div>
    15. div>
    16. <script>
    17. const App={
    18. data(){
    19. return{
    20. list:{
    21. name:'hello',
    22. age:'time',
    23. school:'hello',
    24. title:'world'
    25. }
    26. }
    27. }
    28. }
    29. Vue.createApp(App).mount("#Application")
    30. script>
    31. body>
    32. html>

    渲染效果:

    2.v-for指令的高级用法

            v-for指令在渲染列表时,当我们调用如下这些函数对列表数据对象进行更新时,视图也会对于的更新,函数有:

    1. push() //向列表尾部追加一个元素
    2. pop() //删除列表尾部的一个元素
    3. unshift() //向列表头部插入一个元素
    4. shift() //删除列表头的一个元素
    5. splice() //对列表进行操作
    6. sort() //对列表进行排序操作
    7. reverse() //对列表进行逆序

    例如:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <script src="https://unpkg.com/vue@next">script>
    6. <title>Titletitle>
    7. head>
    8. <body>
    9. <div>
    10. <div id="Application">
    11. <div v-for="key in list">
    12. {{key}}
    13. div>
    14. <button @click="sort">sortbutton>
    15. <button @click="reverse">reversebutton>
    16. <button @click="push">pushbutton>
    17. <button @click="pop">popbutton>
    18. <button @click="shift">shiftbutton>
    19. <button @click="unshift">unshiftbutton>
    20. <button @click="splice">splicebutton>
    21. div>
    22. div>
    23. <script>
    24. const App={
    25. data(){
    26. return{
    27. list:[3,5,2,5,1,2,8,7],
    28. }
    29. },
    30. methods:{
    31. splice(){
    32. this.list.splice(1,1)
    33. },
    34. shift() {
    35. this.list.shift()
    36. },
    37. unshift(){
    38. var num=parseInt(Math.random()*10)
    39. this.list.unshift(num)
    40. },
    41. pop(){
    42. this.list.pop()
    43. },
    44. sort(){
    45. this.list.sort()
    46. },
    47. reverse(){
    48. this.list.reverse()
    49. },
    50. push(){
    51. var num=parseInt(Math.random()*10)
    52. this.list.push(num)
    53. }
    54. }
    55. }
    56. Vue.createApp(App).mount("#Application")
    57. script>
    58. body>
    59. html>

    效果:点击各个按钮实现对于的操作

    四.实战

            实现一个简单的待办任务列表应用,其可以展示当前未完成的任务项,也可以添加新的任务以及删除以及完成的任务

    看码:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. <script src="https://unpkg.com/vue@next">script>
    7. head>
    8. <body>
    9. <div id="Application">
    10. <form @submit.prevent="addTask">
    11. <span>新建任务span>
    12. <input v-model="taskText" placeholder="请输入任务..."/>
    13. <button>添加button>
    14. form>
    15. <ol>
    16. <li v-for="(item,index) in todos">
    17. {{item}}
    18. <button @click="remove(index)">删除任务button>
    19. <hr/>
    20. li>
    21. ol>
    22. div>
    23. <script>
    24. const App={
    25. data(){
    26. return{
    27. //待办任务列表数据
    28. todos:[],
    29. //当前输入的待办任务
    30. taskText:""
    31. }
    32. },
    33. methods:{
    34. //添加一条待办任务
    35. addTask(){
    36. //判断输入框是否为空
    37. if(this.taskTest.length===0){
    38. alert("请输入任务")
    39. return
    40. }
    41. this.todos.push(this.taskText)
    42. this.taskText=""
    43. },
    44. remove(index){
    45. this.todos.splice(index,1)
    46. }
    47. }
    48. }
    49. Vue.createApp(App).mount("#Application")
    50. script>
    51. body>
    52. html>

    效果:

  • 相关阅读:
    关键字 internal
    01RK3588S——Cool Pi 4简介
    HLS接口定义
    电商平台API接口大全(商品详情 API 返回值说明)
    Java并发基础
    【JavaSE】初识泛型
    这个队列的思路是真的好,现在它是我简历上的亮点了。
    Nature 哈佛新型超材料Metafluid粘度、透明度、弹性可变,可用于编程液压机器人
    Mac安装rocketmq
    华为机试真题 C++ 实现【消消乐游戏】【字符串消除】
  • 原文地址:https://blog.csdn.net/weixin_63009369/article/details/133465908