• 初始vue3


    如今新vue项目首选用vue3 + typescript + vite + pinia+……模式。在使用Vue2时,使用的是选项式api进行vue项目的开发,vue3在这里做了重大的更新,vue3使用组合式api进行对项目实例化和构建。另外需要注意vue项目需要nodeJS环境的支持,而vue3需要nodeJS的版本最低是node14.18版本,目前最新是node16的版本(奇数版本一般不用),所以在开发vue3项目之前首先需要安装对应的nodeJS环境。

    vue2与vue3实例化vue实例对比:

    vue2选项式api:

    1. new Vue({
    2. el: '#app',
    3. data() {
    4. return {
    5. }
    6. },
    7. methods: {
    8. },
    9. computed: {
    10. }
    11. })

    vue3组合式api:

    1. //生成一个vue实例
    2. var app=Vue.createApp({
    3. data:function(){
    4. return{
    5. msg:"Hello Vue",
    6. num:0
    7. }
    8. },
    9. methods:{
    10. },
    11. computed: {
    12. },
    13. });
    14. //app挂载的意思
    15. app.mount("#app");

    vue3项目初体验:

    这里通过引入vue.js的形式创建一个简单的vue3项目。

    vue.js可以通过bootCDN下载。

    1. <div id="app">
    2. <div>{{msg}}div>
    3. <div>{{html}}div>
    4. <div v-html="html">div>
    5. <div>{{arr.join("-")}}div>
    6. div>
    7. <script src="https://cdn.bootcdn.net/ajax/libs/vue/3.2.37/vue.global.prod.js">script>
    8. <script>
    9. //生成一个vue实例
    10. var app=Vue.createApp({
    11. data:function(){
    12. return{
    13. msg:"Hello Vue",
    14. html:`

      HTML指令

      `
      ,
    15. arr:[1,2,3,4,5,6]
    16. }
    17. }
    18. });
    19. //app挂载的意思
    20. app.mount("#app");
    21. script>

    v-model数据双向绑定

    1. v-model只能用在表单相关的元素(input、select、 textarea、) 或者自定义组件上

    2. 方向一: 从状态model到view视图(页面中的内容) 状态数据 映射到了视图界面的内容

    3. 方向二: 从view视图 到 状态 model input标签内容随着用户行为进行一个改变,输入的内容同步到状态数据上了

    使用典型场景就是表单信息的收集。

    案例:

    1. <div id="app">
    2. <div>{{msg}}div>
    3. <div>
    4. <input type="text" v-model="msg">
    5. div>
    6. <div>
    7. <div>{{sex}}div>
    8. <label><input type="radio" name="sex" v-model="sex" value="男">label>
    9. <label><input type="radio" name="sex" v-model="sex" value="女">label>
    10. <label><input type="radio" name="sex" v-model="sex" value="保密">保密label>
    11. div>
    12. <div>
    13. <div>{{hobby}}div>
    14. <label><input type="checkbox" name="hobby" v-model="hobby" value="唱歌">唱歌label>
    15. <label><input type="checkbox" name="hobby" v-model="hobby" value="跳舞">跳舞label>
    16. <label><input type="checkbox" name="hobby" v-model="hobby" value="打球">打球label>
    17. div>
    18. <div>
    19. <div>{{desc}}div>
    20. <textarea name="desc" id="" cols="30" rows="10" v-model="desc">textarea>
    21. div>
    22. <div>
    23. <div>{{type}}div>
    24. <select name="type" id="" v-model="type">
    25. <option value="radio">单选option>
    26. <option value="checkbox">多选option>
    27. <option value="short">问答option>
    28. <option value="long">主观option>
    29. select>
    30. div>
    31. div>
    32. <script src="https://cdn.bootcdn.net/ajax/libs/vue/3.2.37/vue.global.js">script>
    33. <script>
    34. var app=Vue.createApp({
    35. data:function(){
    36. return{
    37. msg:"hello Vue",
    38. sex:"男",
    39. hobby:[],//复选框 注意是数组
    40. desc:"",
    41. type:"radio"
    42. }
    43. }
    44. });
    45. app.mount("#app");
    46. script>

    注意:按钮类型的标签value必须要写值,否则拿不到对应的值;select下拉列表在进行数据双向绑定的时候v-model写在select标签上。

    v-for列表渲染:

    1. <div id="app">
    2. <div>{{msg}}div>
    3. <ul>
    4. <li v-for="item in arr">{{item}}li>
    5. ul>
    6. <ul>
    7. <li v-for="(item,index) in arr">{{index}}-{{item}}li>
    8. ul>
    9. <p v-for="val in obj">{{val}}p>
    10. <p v-for="(val,key) in obj">{{key}}:{{val}}p>
    11. <p v-for="(val,key,index) in obj">{{index}}-{{key}}:{{val}}p>
    12. <span v-for="c in msg">{{c}}span>
    13. <br>
    14. <a href="" v-for="item in 10" style="margin-left: 10px;">{{item}}a>
    15. div>
    16. <script src="https://cdn.bootcdn.net/ajax/libs/vue/3.2.37/vue.global.js">script>
    17. <script>
    18. var app=Vue.createApp({
    19. data:function(){
    20. return{
    21. msg:"hello Vue",
    22. arr:["香蕉","苹果","葡萄","荔枝","桃子"],
    23. obj:{
    24. name:"jake",
    25. age:20,
    26. sex:"男"
    27. }
    28. }
    29. }
    30. });
    31. app.mount("#app");
    32. script>

    v-for可以循环数字,循环字符串,循环数组及对象。

    关于数组和对象中参数顺序的解释:

    1.所有的循环,首要目的都是为了获取元素的值

    2.其次是元素的键

    3.最后是元素的索引

    所以v-for的参数第一个是值,第二个是键,第三个是索引。

    v-for与v-model综合案例:

    1. <div id="app">
    2. <div>{{msg}}div>
    3. <div>
    4. <input type="text" v-model="msg" :value="msg">
    5. div>
    6. <div>
    7. <div>{{sex}}div>
    8. <label v-for="item in sexArr"><input :type="item.type" :name="item.name" v-model="sex" :value="item.value">{{item.label}}label>
    9. div>
    10. <div>
    11. <div>{{hobby.join(",")}}div>
    12. <label><input type="checkbox" name="hobby" v-model="hobby" value="唱歌">唱歌label>
    13. <label><input type="checkbox" name="hobby" v-model="hobby" value="跳舞">跳舞label>
    14. <label><input type="checkbox" name="hobby" v-model="hobby" value="打球">打球label>
    15. div>
    16. <div>
    17. <div>{{desc}}div>
    18. <textarea name="desc" id="" cols="30" rows="10" v-model="desc">textarea>
    19. div>
    20. <div>
    21. <div>{{type}}div>
    22. <select name="type" id="" v-model="type">
    23. <option v-for="(item,index) in optionArr" :value="item.value">{{item.label}}option>
    24. select>
    25. div>
    26. div>
    27. <script src="https://cdn.bootcdn.net/ajax/libs/vue/3.2.37/vue.global.js">script>
    28. <script>
    29. var app=Vue.createApp({
    30. data:function(){
    31. return{
    32. msg:"hello Vue",
    33. sex:"男",
    34. hobby:[],
    35. desc:"",
    36. type:"radio",
    37. sexArr:[
    38. {
    39. type:"radio",
    40. name:"sex",
    41. value:"女",
    42. label:"女"
    43. },
    44. {
    45. type:"radio",
    46. name:"sex",
    47. value:"男",
    48. label:"男"
    49. },
    50. {
    51. type:"radio",
    52. name:"sex",
    53. value:"未知",
    54. label:"未知"
    55. }
    56. ],
    57. optionArr:[
    58. {
    59. value:"radio",
    60. label:"单选"
    61. },
    62. {
    63. value:"checkbox",
    64. label:"多选"
    65. },
    66. {
    67. value:"short",
    68. label:"问答"
    69. }
    70. ]
    71. }
    72. }
    73. });
    74. app.mount("#app");
    75. script>

     补充案例:

     

  • 相关阅读:
    Go map转json
    Celery笔记八之数据库操作定时任务
    Java web中,服务器运行不过来
    Vue学习第19天——vue脚手架配置代理
    Linux——粘滞位|Linux编辑器-vim使用|复制和粘贴撤销和反撤销|光标定位|删除大小写转换、替换底行模式|分屏操作|信任列表
    寻找数字(dfs)
    天玑810和天玑800u哪个好 天玑810和天玑800u差多少
    高仿互站网多套模板完整源码
    浅谈原型链
    Jenkins使用遇到的一些问题
  • 原文地址:https://blog.csdn.net/Doulvme/article/details/126241896