• Vue模板语法(下)


    事件处理器

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title></title>
    6. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    7. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    8. <style>
    9. .pink{
    10. width: 400px;
    11. height: 400px;
    12. background-color: pink;
    13. }
    14. .orange{
    15. width: 300px;
    16. height: 300px;
    17. background-color: orange;
    18. }
    19. .blue{
    20. width: 200px;
    21. height: 200px;
    22. background-color:rebeccapurple;
    23. }
    24. .green{
    25. width: 100px;
    26. height: 100px;
    27. background-color: green;
    28. }
    29. </style>
    30. </head>
    31. <body>
    32. <!-- 定义边界 -->
    33. <div id="app">
    34. <p>冒泡事件</p>
    35. <div class="pink" @click="pink">
    36. <div class="orange" @click="orange">
    37. <div class="blue" @click="blue">
    38. <div class="green" @click.stop="green"></div>
    39. </div>
    40. </div>
    41. </div>
    42. <p>点击夸你</p>
    43. <button @click.once="dosub">提交</button>
    44. </body>
    45. <script type="text/javascript">
    46. // 绑定边界 ES6具体体现
    47. new Vue({
    48. el: '#app',
    49. data() {
    50. return {
    51. f200: 'f200'
    52. };
    53. },
    54. methods: {
    55. pink() {
    56. alert("pink");
    57. },
    58. orange() {
    59. alert("orange");
    60. },
    61. blue() {
    62. alert("blue");
    63. },
    64. green() {
    65. alert("green");
    66. },
    67. dosub(){
    68. alert("兄弟,点的好");
    69. }
    70. }
    71. })
    72. </script>
    73. </html>

    冒泡事件

     

     阻止事件冒泡

     

     事件只能单击一次

    什么是事件冒泡?

    冒泡事件是指在Web开发中的事件传播过程中,事件从DOM树的最底层元素(通常是最具体的元素)向上冒泡到DOM树的根节点的过程。这种事件传播模型允许开发者在更高层次的元素上监听和处理事件,而不需要在每个具体的元素上都添加事件处理程序。

    冒泡事件的传播过程可以简要描述如下:

    1. 事件首先从触发它的元素开始,然后向上冒泡到DOM树的根节点。
    2. 在这个过程中,每个祖先元素都有机会捕获并处理事件,如果它们注册了相应的事件处理程序。
    3. 如果事件处理程序返回true,事件将继续冒泡,直到到达根节点。
    4. 如果事件处理程序返回false或没有返回值,事件将停止冒泡,不会继续向上传播。

    冒泡事件允许开发者在父元素上注册事件处理程序,以便捕获子元素触发的事件,从而提高了事件处理的效率和可维护性。

     

     表单的综合案例

    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. 姓名:<input name="name" v-model="name"/><br />
    11. 密码:<input type="password" v-model="pwd"/><br />
    12. 性别:<span v-for="s in sexList">
    13. <input type="radio" :name="sex" v-model="sex" :value="s.id"/>{{s.name}}
    14. </span><br />
    15. 籍贯:<select name="myAddr" v-model="myAddr">
    16. <option v-for="a in address" :value="a.id">{{a.name}}</option>
    17. </select><br />
    18. 爱好:<span v-for="h in hobby">
    19. <input type="checkbox" v-model="myLike" name="myLike" :value="h.id"/>{{h.name}}
    20. </span><br />
    21. 简介:<textarea v-model="sign" cols="20" rows="2"></textarea><br />
    22. 是否同意:<input type="checkbox" v-model="ok"/><br />
    23. <button v-show="ok" @click="dosub">提交</button>
    24. </div>
    25. <script type="text/javascript">
    26. new Vue({
    27. el:'#app',
    28. data(){
    29. return {
    30. name:'',
    31. pwd:'',
    32. sexList:[
    33. { name:'男', id:1 },
    34. { name:'女', id:2 },
    35. { name:'不详', id:3 }
    36. ],
    37. hobby:[
    38. { name:'唱', id:1 },
    39. { name:'跳', id:2 },
    40. { name:'Rap', id:3 },
    41. { name:'篮球', id:4 }
    42. ],
    43. myLike:[],
    44. address:[
    45. { name:'湖南', id:1 },
    46. { name:'湖北', id:2 },
    47. { name:'河南', id:3 },
    48. { name:'河北', id:4 }
    49. ],
    50. myAddr:null,
    51. sign:null,
    52. ok:false,
    53. sex:null
    54. };
    55. },
    56. methods:{
    57. dosub(){
    58. var obj = {};
    59. obj.name = this.name;
    60. obj.pwd = this.pwd;
    61. obj.sex = this.sex;
    62. obj.address = this.myAddr;
    63. obj.love = this.myLike;
    64. obj.sign = this.sign;
    65. console.log(obj);
    66. }
    67. }
    68. });
    69. </script>
    70. </body>
    71. </html>

     效果图:

     组件通信

    自定义事件

       监听事件:$on(eventName)

       触发事件:$emit(eventName)

       注1:Vue自定义事件是为组件间通信设计  

            vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定

            父Vue实例->Vue实例,通过prop传递数据

            子Vue实例->父Vue实例,通过事件传递数据

       注2:事件名

            不同于组件和prop,事件名不存在任何自动化的大小写转换。而是触发的事件名需要完全匹配监听这个事件所用的名称

            建议使用“短横线分隔命名”,例如:three-click

     自定义组件

    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. <p>自定义组件</p>
    11. <my-<button type="button">liao</button>
    12. </div>
    13. <script type="text/javascript">
    14. new Vue({
    15. el:'#app',
    16. components:{
    17. 'mybutton':{
    18. template:''
    19. }
    20. },
    21. data(){
    22. return {
    23. msg:'123'
    24. };
    25. },
    26. methods:{
    27. fun1(){
    28. alert("fun1");
    29. }
    30. }
    31. });
    32. </script>
    33. </body>
    34. </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. <p>自定义组件</p>
    11. <button type="button">liao</button><br />
    12. <p>组件通信——父传子</p>
    13. <my-button m="纸"></my-button>
    14. <p>组件通信——父传子(纸)</p>
    15. <my-button m="翔" n="10"></my-button>
    16. </div>
    17. <script type="text/javascript">
    18. new Vue({
    19. el:'#app',
    20. components:{
    21. 'my-button':{
    22. props:['m','n'],
    23. template:'',
    24. data:function(){
    25. return {
    26. n:1
    27. }
    28. },
    29. methods:{
    30. clickMe(){
    31. this.n++;
    32. }
    33. }
    34. }
    35. },
    36. });
    37. </script>
    38. </body>
    39. </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. <p>组件通信——子传父</p>
    11. <my-button m="料" n="10" @xxx='getParam'></my-button>
    12. </div>
    13. <script type="text/javascript">
    14. new Vue({
    15. el:'#app',
    16. components:{
    17. 'my-button':{
    18. props:['m','n'],
    19. template:'',
    20. data:function(){
    21. return {
    22. count:1
    23. }
    24. },
    25. methods:{
    26. clickMe(){
    27. let name = '来了';
    28. let bname = '开始来了';
    29. let info = '我tm来了';
    30. this.$emit('xxx', name, bname, info);
    31. }
    32. }
    33. }
    34. },
    35. data(){
    36. return {
    37. msg:'1234'
    38. };
    39. },
    40. methods: {
    41. getParam(a, b, c){
    42. console.log(a, b, c);
    43. }
    44. }
    45. });
    46. </script>
    47. </body>
    48. </html>

     

     效果图:

  • 相关阅读:
    免费开源的在线手绘画图工具
    Tomcat知识点(深入剖析Tomcat学习笔记)
    记第二次线上问题排查过程
    第13篇 2D绘图(三)绘制文字
    从零开始利用MATLAB进行FPGA设计(一):建立脉冲检测模型的Simulink模型2
    springboot大学生拼车管理系统毕业设计源码201507
    解决LabVIEW通过OPC Server读取PLC地址时的错误180121602
    Java中三种方法重复使用同一输入流
    web前端期末大作业:基于HTML+CSS+JavaScript奥迪企业bootstrap响应式网站
    Opencv与python实现多目标跟踪 (一) - PaddleDetection目标检测
  • 原文地址:https://blog.csdn.net/liaozhixiangjava/article/details/133071788