• Vue语法模板续篇


    上次与大家分享了Vue语法模板的部分,今天继续与大家分享。

    目录

    一、事件处理器

    1、事件修饰符

    2、按键修饰符

    3、冒泡事件与事件处理器

    3.1解释冒泡事件

    2、事件处理器的具体应用(.stop冒泡事件,.once只提交一次)

    二、自定义组件&组件通信

    1、vue组件

      1.1 组件简介

    1.2全局和局部组件

    1.3 props

    2、自定义组件My-button

     3、组件通信:将子组件的值传给父组件

    三、表单的综合运用 


    一、事件处理器

    1、事件修饰符

      Vue通过由点(.)表示的指令后缀来调用修饰符,

      .stop

      .prevent

      .capture

      .self

      .once

    1. <a v-on:click.stop="doThis">a>
    2. <form v-on:submit.prevent="onSubmit">form>
    3. <a v-on:click.stop.prevent="doThat">a>
    4. <form v-on:submit.prevent>form>
    5. <div v-on:click.capture="doThis">...div>
    6. <div v-on:click.self="doThat">...div>
    7. <a v-on:click.once="doThis">a>

    2、按键修饰符

      Vue允许为v-on在监听键盘事件时添加按键修饰符:

      

    1.   <input v-on:keyup.13="submit">
    2.   Vue为最常用的按键提供了别名
    3.   
    4.   <input v-on:keyup.enter="submit">

      全部的按键别名:

      .enter

      .tab

      .delete (捕获 "删除" 和 "退格" 键)

      .esc

      .space

      .up

      .down

      .left

      .right

      .ctrl

      .alt

      .shift

      .meta      

    3、冒泡事件与事件处理器

    3.1解释冒泡事件

    冒泡事件就是指父元素和子元素有相同的事件,当触发子元素事件时,会向上冒泡,同时也会触发父元素事件

    用一张图表示:

    示例:

     这四个div容器具有相同的事件,在最里面的容器中添加了.stop就能够阻止冒泡

     

    不会设置动图所以这个效果无法直观的被看见

    2、事件处理器的具体应用(.stop冒泡事件,.once只提交一次)

    1. <!DOCTYPE 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. .red{
    9. width: 400px;
    10. height: 400px;
    11. background-color: red;
    12. }
    13. .orange{
    14. width: 300px;
    15. height: 300px;
    16. background-color: orange;
    17. }
    18. .blue{
    19. width: 200px;
    20. height: 200px;
    21. background-color: blue;
    22. }
    23. .pink{
    24. width: 100px;
    25. height: 100px;
    26. background-color: pink;
    27. }
    28. </style>
    29. </head>
    30. <body>
    31. <div id="app">
    32. {{msg}}
    33. <p>冒泡事件</p>
    34. <div
    35. class="red" @click="red">
    36. <div
    37. class="orange" @click="orange">
    38. <div
    39. class="blue" @click="blue">
    40. <div class="pink" @click.stop="pink"></div>
    41. </div>
    42. </div>
    43. </div>
    44. <p>提交答案</p>
    45. <button @click.once="dosub">提交</button>
    46. <p>按键修饰符</p>
    47. <input @keyup.enter="dosub"/>
    48. </div>
    49. <script>
    50. new Vue({
    51. el:"#app",
    52. data(){
    53. return {
    54. msg:'小猪猪'
    55. };
    56. },
    57. methods:{
    58. red(){
    59. alert('red');
    60. },
    61. orange(){
    62. alert('orange');
    63. },
    64. blue(){
    65. alert('blue');
    66. },
    67. pink(){
    68. alert('pink');
    69. },
    70. dosub(){
    71. alert('提交');
    72. }
    73. }
    74. })
    75. </script>
    76. </body>
    77. </html>

    二、自定义组件&组件通信

    1、vue组件

      1.1 组件简介

          组件(Component)是Vue最强大的功能之一

          组件可以扩展HTML元素,封装可重用的代码

          组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树

    1.2全局和局部组件

          全局组件:Vue.component(tagName, options),tagName为组件名,options为配置选项。

          局部组件: new Vue({el:'#d1',components:{...}})

      注册后,我们可以使用以下方式来调用组件:

          

    1.3 props

          props是父组件用来传递数据的一个自定义属性。

          父组件的数据需要通过props把数据传给子组件,子组件需要显式地用props选项声明 "prop"

    2、自定义组件My-button

    1. <body>
    2. <div id="app">
    3. {{msg}}
    4. <my-button m="小猪猪" @mymethod='aaa'></my-button>
    5. </div>
    6. <script>
    7. Vue.component('my-button',{
    8. props:'m',//定义组件中的变量
    9. //template代表了自定义组件在页面上展示的内容
    10. template:'',
    11. data:function(){
    12. return{
    13. n:1,
    14. }
    15. },
    16. methods:{
    17. incrn(){
    18. this.n++;
    19. }
    20. new Vue({
    21. el:"#app",
    22. data(){
    23. return{
    24. msg:'小猪猪',
    25. }
    26. },

     3、组件通信:将子组件的值传给父组件

    1. <!DOCTYPE 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}}
    11. <my-button m="小猪猪" @mymethod='aaa'></my-button>
    12. </div>
    13. <script>
    14. Vue.component('my-button',{
    15. props:'m',//定义组件中的变量
    16. //template代表了自定义组件在页面上展示的内容
    17. template:'',
    18. data:function(){
    19. return{
    20. n:1,
    21. }
    22. },
    23. methods:{
    24. incrn(){
    25. this.n++;
    26. var name = "熊二";
    27. var sex = "男";
    28. var age = 19;
    29. console.log(name);
    30. console.log(sex);
    31. console.log(age);
    32. this.$emit("mymethod",name,sex,age);//将子组件传递参数给父组件的关键字与自定义事件
    33. }
    34. }
    35. })
    36. new Vue({
    37. el:"#app",
    38. data(){
    39. return{
    40. msg:'小猪猪',
    41. }
    42. },
    43. methods:{
    44. aaa(a,b,c){
    45. console.log(a);
    46. console.log(b);
    47. console.log(c);
    48. }
    49. }
    50. })
    51. </script>
    52. </body>
    53. </html>

    三、表单的综合运用 

    1. <!DOCTYPE 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. <h1>标题</h1>
    11. <ul>
    12. <li>
    13. <p>vue表单</p>
    14. <label>姓名:</label><input v-model="uname" /><br />
    15. <label>密码:</label><input v-model="upwd" type="password" /><br />
    16. <!-- 将用户的输入值转为 Number 类型 -->
    17. <label>年龄:</label><input v-model.number="age" /><br />
    18. <label>性别:</label>
    19. <input type="radio" v-model="sex" name="sex" value="1" />
    20. <input type="radio" v-model="sex" name="sex" value="0" /><br />
    21. <label>爱好:</label>
    22. <div v-for="h in hobby">
    23. <input type="checkbox" v-model="hobbies" v-bind:value="h.id" />{{h.name}}
    24. </div>
    25. <label>类别:</label>
    26. <select v-model="type">
    27. <option value="-1">===请选择===</option>
    28. <option v-for="t in types" v-bind:value="t.id">{{t.name}}</option>
    29. </select><br />
    30. <label>备注:</label>
    31. <textarea v-bind:value="mark"></textarea><br />
    32. 确认<input type="checkbox" v-model="flag" />
    33. <input type="submit" v-bind:disabled="show" v-on:click="doSubmit" />
    34. </li>
    35. </ul>
    36. </div>
    37. </body>
    38. <script type="text/javascript">
    39. new Vue({
    40. el: '#app',
    41. data() {
    42. return {
    43. uname: null,
    44. upwd: null,
    45. age: 10,
    46. sex: 1,
    47. hobby: [{
    48. id: 1,
    49. name: '篮球'
    50. }, {
    51. id: 2,
    52. name: '足球'
    53. }, {
    54. id: 3,
    55. name: '象棋'
    56. }],
    57. hobbies: [],
    58. types: [{
    59. id: 1,
    60. name: 'A'
    61. }, {
    62. id: 2,
    63. name: 'B'
    64. }, {
    65. id: 3,
    66. name: 'C'
    67. }],
    68. type: null,
    69. mark: '学生备注',
    70. flag: false
    71. }
    72. },
    73. computed: {
    74. show: function() {
    75. return !this.flag;
    76. }
    77. },
    78. methods: {
    79. doSubmit: function() {
    80. console.log('doSubmit')
    81. var obj = {
    82. uname: this.uname,
    83. upwd: this.upwd,
    84. age:this.age+10,
    85. sex: this.sex,
    86. hobbies:this.hobbies,
    87. type: this.type,
    88. mark: this.mark,
    89. }
    90. console.log(obj);
    91. }
    92. }
    93. })
    94. </script>
    95. </html>

  • 相关阅读:
    HarmonyOS实战经验合集之ArkUI(二)
    ensp配置访问控制拓扑如何配置
    Spring Security 基础使用
    python 根据两个向量,求的之间的旋转矩阵:
    STM32 PB3 PB4 配置为普通IO口 HAL库 LL
    苹果,设计思维的“布道者”
    IP地址,子网,掩码的计算
    结合element的el-tooltip实现文本溢出进行省略,鼠标移入显示全部
    知识图谱实战应用28-基于py2neo的ICD-11疾病分类的知识图谱的查询与问答实战应用
    Spring cloud alibaba——Senta(二)
  • 原文地址:https://blog.csdn.net/m0_67477525/article/details/126697680