• Vue模板语法(下)


    一.事件处理器

    什么是事件处理器

    建立一个HTML编写事件处理器

     

    测试结果

    二.表单的综合案例

    什么是表单综合案例 

    建立一个HTML来编写表单案例

    测试结果 

     三.局部组件

    什么是组件通信

     自定义组件

    测试结果

    组件通信-父传子

     测试结果

    组件通信-子传父

    测试结果


    一.事件处理器

    什么是事件处理器

    事件处理器是一种用于响应和处理用户交互事件的机制。在Web开发中,用户通过与页面中的元素(如按钮、链接、表单等)进行交互来触发各种事件,如点击、鼠标移动、键盘输入等。事件处理器允许开发者定义并执行相应的操作来响应这些事件。

    在Vue中,事件处理器可以通过指令(v-on)或@符号来绑定到HTML元素上。下面是一个示例:

    <button v-on:click="handleClick">Click me!</button>
    

    在上述示例中,v-on:click="handleClick"将事件处理器handleClick绑定到按钮的点击事件上。当用户点击按钮时,绑定的handleClick方法会被调用。

    可以在Vue实例的方法中定义事件处理器,如以下示例所示:

    1. new Vue({
    2. methods: {
    3. handleClick: function() {
    4. // 处理点击事件的逻辑
    5. }
    6. }
    7. })

    在上述示例中,handleClick是一个Vue实例中的方法,它会在按钮点击事件发生时被调用。

    除了点击事件(click),Vue还支持一系列其他事件,如mouseoverinputkeydown等。开发者可以根据具体需求选择合适的事件,并为其绑定对应的事件处理器。

    事件处理器不仅可以在Vue实例方法中定义,还可以直接在模板中使用内联表达式的方式定义。例如:

    <button v-on:click="alert('Hello!')">Click me!</button>
    

    在上述示例中,点击按钮时会直接调用内联表达式alert('Hello!')来弹出一个对话框。

    总的来说,事件处理器是Vue中用于响应用户交互事件的机制,通过绑定事件处理器,开发者可以定义相应的操作来处理用户的操作。

    建立一个HTML编写事件处理器
     
    1. "utf-8">
    2. 事件处理
    3. "app">
    4. "one"@click="fun1">
    5. "two" @click.stop="fun2">
    6. "three" @click.stop="fun3">
    7. "four" @click.stop="fun4">
  • "msg"/>
  • 测试结果

    二.表单的综合案例

    什么是表单综合案例 

    表单综合案例是指一个包含多个表单元素的综合应用案例,旨在演示如何使用Vue来处理和验证表单数据。

    一个简单的表单综合案例可以包含以下元素:

    1. 文本输入框(input):用于接收用户输入的文本信息。
    2. 复选框(checkbox):用于选择一个或多个选项。
    3. 单选框(radio):用于从多个选项中选择一个选项。
    4. 下拉选择框(select):用于从预定义的选项中选择一个选项。
    5. 文本域(textarea):用于接收多行文本输入。
    6. 提交按钮(button):用于提交表单数据。

    以下是一个简单的表单综合案例示例:

    1. <div id="app">
    2. <form @submit.prevent="submitForm">
    3. <label for="name">姓名</label>
    4. <input type="text" id="name" v-model="form.name" required>
    5. <br>
    6. <label for="email">邮箱</label>
    7. <input type="email" id="email" v-model="form.email" required>
    8. <br>
    9. <label>性别</label>
    10. <input type="radio" id="male" value="男" v-model="form.gender">
    11. <label for="male"></label>
    12. <input type="radio" id="female" value="女" v-model="form.gender">
    13. <label for="female"></label>
    14. <br>
    15. <label for="country">国家</label>
    16. <select id="country" v-model="form.country">
    17. <option value="">请选择</option>
    18. <option value="中国">中国</option>
    19. <option value="美国">美国</option>
    20. <option value="英国">英国</option>
    21. </select>
    22. <br>
    23. <label for="message">留言</label>
    24. <textarea id="message" v-model="form.message"></textarea>
    25. <br>
    26. <button type="submit">提交</button>
    27. </form>
    28. </div>

    在上述示例中,使用Vue的指令(v-model)将不同类型的表单元素与Vue实例中的数据(form)进行双向绑定。当用户在表单元素中进行输入或选择时,绑定的数据会实时更新。

    在Vue实例中,我们可以定义一个form对象来存储表单数据,并提供一个submitForm方法来处理表单提交事件。在submitForm方法中,可以进行表单数据的验证、发送请求等操作。

    1. new Vue({
    2. el: '#app',
    3. data: {
    4. form: {
    5. name: '',
    6. email: '',
    7. gender: '',
    8. country: '',
    9. message: ''
    10. }
    11. },
    12. methods: {
    13. submitForm: function() {
    14. // 处理表单提交逻辑
    15. console.log(this.form);
    16. }
    17. }
    18. })

    上述示例中,定义了一个Vue实例,将form对象作为数据进行管理,并在submitForm方法中打印出表单数据。

    通过上述案例的组合运用,可以实现一个简单的表单综合案例来处理用户输入的表单数据,并根据实际需求进行相应的处理和验证。

    建立一个HTML来编写表单案例
    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js">script>
    6. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    7. <title>表单title>
    8. head>
    9. <body>
    10. <div id="app">
    11. 姓名:<input name="name" v-model="name"/><br />
    12. 密码:<input type="password" v-model="pwd"/><br />
    13. 性别:<span v-for="s in sexList">
    14. <input type="radio" name="sex" v-model="sex" :value="s.id" />{{s.name}}
    15. span><br />
    16. 籍贯:<select name="myAddr" v-model="myAddr">
    17. <option v-for="a in address" :value="a.id">{{a.name}}option>
    18. select><br />
    19. 爱好:<span v-for="h in hobby" >
    20. <input type="checkbox" v-model="myLike" :value="h.id"/>{{h.name}}
    21. span><br />
    22. 个人简介:<textarea v-model="sign" cols="10" rows="5">textarea><br />
    23. 同意:<input type="checkbox" v-model="ok"/><br />
    24. <button v-show="ok" @click="dosub">提交button>
    25. div>
    26. <script type="text/javascript">
    27. new Vue({
    28. el:"#app",
    29. data(){
    30. return{
    31. name:'放下屠刀',
    32. pwd:'123456',
    33. sexList:[{
    34. name:'男',id:1
    35. },
    36. {
    37. name:'女',id:2
    38. },{
    39. name:'未知',id:3
    40. }],
    41. sex:0,
    42. hobby:[{
    43. name:'洗脚',id:1
    44. },{
    45. name:'按摩',id:2
    46. },{
    47. name:'唱歌',id:3
    48. },{
    49. name:'打篮球',id:4
    50. }],
    51. myLike:[],
    52. address:[{
    53. name:'湖南',id:1
    54. },{
    55. name:'湖北',id:2
    56. },{
    57. name:'北京',id:3
    58. },{
    59. name:'上海',id:4
    60. }],
    61. myAddr:null,
    62. sign:null,
    63. ok:false
    64. };
    65. },
    66. methods:{
    67. dosub(){
    68. var obj={};
    69. obj.name=this.name;
    70. obj.pwd=this.pwd;
    71. obj.sex=this.sex;
    72. obj.address=this.myAddr;
    73. obj.love=this.myLike;
    74. obj.sign=this.sign;
    75. console.log(obj);
    76. }
    77. }
    78. });
    79. script>
    80. body>
    81. html>
    测试结果 

     三.局部组件

    什么是组件通信

    组件通信是指不同组件之间通过传递数据和/或事件来进行交流和共享信息的过程。在前端开发中,应用程序通常由多个组件构成,这些组件可以是独立的、可复用的模块,它们可能需要在不同层级或层间共享数据,或者需要相互触发事件进行交互。

    组件通信可以分为两种主要类型:父子组件通信和兄弟组件通信。

    1. 父子组件通信:父组件可以通过属性绑定向子组件传递数据,子组件可以通过事件来向父组件发送消息。父组件通过属性绑定将数据传递给子组件,子组件可以通过props属性接收并使用这些数据。子组件可以通过$emit方法触发事件,并传递参数给父组件。这种通信方式符合单向数据流的原则,父组件通过属性传递数据给子组件,而子组件通过事件将消息传递给父组件。

    2. 兄弟组件通信:兄弟组件之间无法直接通信,因为它们之间没有直接的父子关系。但是可以通过共享同一个父组件或通过一个中央事件总线的方式来实现兄弟组件通信。

    除了以上两种常见的组件通信方式,还有其他的通信方式,如使用状态管理库(如Vuex)进行状态管理、使用全局变量、使用路由参数等。选择合适的组件通信方式取决于具体需求和应用的复杂程度。

    总的来说,组件通信是在不同组件之间传递数据和事件进行交流和共享信息的过程。通过合适的通信方式,可以实现组件之间的数据共享、事件触发和相互协作,从而构建强大的应用程序。

     自定义组件
    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js">script>
    6. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    7. <title>组件通信父传子title>
    8. head>
    9. <body>
    10. <div id="app">
    11. <p>自定义组件p>
    12. <my-button>xxmy-button>
    13. div>
    14. <script type="text/javascript">
    15. new Vue({
    16. el:"#app",
    17. components:{
    18. 'my-button':{
    19. template:''
    20. }
    21. },
    22. data(){
    23. return{
    24. msg:'放下屠刀',
    25. };
    26. },
    27. methods:{
    28. fun1(){
    29. alert("fun1");
    30. }
    31. }
    32. });
    33. script>
    34. body>
    35. html>
    测试结果

    组件通信-父传子
    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js">script>
    6. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    7. <title>组件传参父传子title>
    8. head>
    9. <body>
    10. <div id="app">
    11. <p>自定义组件p>
    12. <my-button>xxmy-button>
    13. <p>组件通信-父传子p>
    14. <my-button m='崽子'>my-button>
    15. <p>组件通信-父传子2p>
    16. <my-button m='毕崽子' n="10">my-button>
    17. div>
    18. <script type="text/javascript">
    19. new Vue({
    20. el:"#app",
    21. components:{
    22. 'my-button':{
    23. props:['m'],
    24. template:'',
    25. data:function(){
    26. return{
    27. n:1
    28. }
    29. },
    30. methods:{
    31. clickMe(){
    32. this.n++;
    33. }
    34. }
    35. }
    36. },
    37. data(){
    38. return{
    39. msg:'放下屠刀',
    40. };
    41. },
    42. methods:{
    43. fun1(){
    44. alert("fun1");
    45. }
    46. }
    47. });
    48. script>
    49. body>
    50. html>
     测试结果

    组件通信-子传父
    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js">script>
    6. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    7. <title>组件传参子传父title>
    8. head>
    9. <body>
    10. <div id="app">
    11. <p>组件通信-子传父p>
    12. <my-button m='毕崽子' @xxxxx="getParam">my-button>
    13. div>
    14. <script type="text/javascript">
    15. new Vue({
    16. el:"#app",
    17. components:{
    18. 'my-button':{
    19. props:['m'],
    20. template:'',
    21. methods:{
    22. clickMe(){
    23. let name='徐崽子';
    24. let bname='徐崽子的nl生活';
    25. let price='自己的书'
    26. this.$emit('xxxxx',name,bname,price)
    27. }
    28. }
    29. }
    30. },
    31. data(){
    32. return{
    33. msg:'放下屠刀',
    34. };
    35. },
    36. methods:{
    37. getParam(a,b,c){
    38. console.log(a,b,c);
    39. }
    40. }
    41. });
    42. script>
    43. body>
    44. html>
    测试结果

  • 相关阅读:
    洛谷题解 | P1051 谁拿了最多奖学金
    Golang | Leetcode Golang题解之第47题全排列II
    【Verilog刷题篇】硬件工程师从0到入门3|组合逻辑复习+时序逻辑入门
    item_get-商品详情
    记录一下在Pycharm中虚拟环境的创建
    LeetCode | 232. 用栈实现队列
    【市场解读】掌握MT4外汇交易的核心技巧
    无主复制系统(2)-读写quorum
    02|LangChain | 从入门到实战 -六大组件之Models IO
    【Flink】FlinkCDC获取mysql数据时间类型差8小时时区解决方案
  • 原文地址:https://blog.csdn.net/2201_75455485/article/details/133063492