• Vue的详细教程--基础语法【下】


    🥳🥳Welcome Huihui's Code World ! !🥳🥳

    接下来看看由辉辉所写的关于Vue的相关操作吧

    目录

    🥳🥳Welcome Huihui's Code World ! !🥳🥳

    一.事件处理器

    ①.stop

    ②.prevent

    ③.once

    加了once

    没加once

    ④按键修饰符

    ⑤表单案例

    二.自定义组件

    案例

    三.组件通信

    父传子

    子传父


    一.事件处理器

    ①.stop

    处理事件冒泡的问题(👇)

    这四个div是属于嵌套关系,当我点击包裹在最里面的div时,居然触发了外面的那些div的事件

    1. 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. <style>
    8. .me{
    9. background-color: red;
    10. height: 400px;
    11. width: 400px;
    12. }
    13. .you{
    14. background-color: yellow;
    15. height: 300px;
    16. width: 300px;
    17. }
    18. .him{
    19. background-color: pink;
    20. height: 200px;
    21. width: 200px;
    22. }
    23. .her{
    24. background-color: black;
    25. height: 100px;
    26. width: 100px;
    27. }
    28. style>
    29. head>
    30. <body>
    31. <div id="app">
    32. <h1>事件处理器h1>
    33. <div class="me" @click="me">
    34. <div class="you" @click="you">
    35. <div class="him" @click="him">
    36. <div class="her" @click="her">div>
    37. div>
    38. div>
    39. div>
    40. div>
    41. <script type="text/javascript">
    42. // 构建vue实例 绑定边界
    43. new Vue({
    44. el:'#app',
    45. data(){
    46. return{
    47. }
    48. },
    49. methods: {
    50. me(){
    51. alert("me");
    52. },you(){
    53. alert("you");
    54. },him(){
    55. alert("him");
    56. },her(){
    57. alert("her");
    58. }
    59. },
    60. })
    61. script>
    62. body>
    63. html>

    但是当我们加以处理之后,便可以完美的解决这个问题

    ②.prevent

    用于阻止事件的默认行为

    可能这样说会有些笼统,那么举一个例子,当我们点击提交按钮进行提交的时候,就不会在重新加载此界面,而只是进行提交的操作

    ③.once

    加了once

    没加once

    ④按键修饰符

    顺便提一嘴,vue允许为v-on在监听键盘事件时添加按键修饰符

    全部的按键别名:

      .enter

      .tab

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

      .esc

      .space

      .up

      .down

      .left

      .right

      .ctrl

      .alt

      .shift

      .meta      

    ⑤表单案例

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js">script>
    6. <title>表单title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <h1>注册界面h1>
    11. <ul>
    12. <li>
    13. <label>姓名:label><input v-model="uname" /><br />
    14. <label>密码:label><input v-model="upwd" type="password" /><br />
    15. <label>性别:label>
    16. <input type="radio" v-model="sex" name="sex" value="1" />
    17. <input type="radio" v-model="sex" name="sex" value="0" /><br />
    18. <label>爱好:label>
    19. <div v-for="h in hobby">
    20. <input type="checkbox" v-model="hobbies" v-bind:value="h.id" />{{h.name}}
    21. div>
    22. <label>地址:label>
    23. <select v-model="myaddress">
    24. <option value="-1">===请选择===option>
    25. <option v-for="a in address" v-bind:value="a.id">{{a.name}}option>
    26. select><br />
    27. <label>个人描述:label>
    28. <textarea v-bind:value="mark">textarea><br />
    29. <input type="checkbox" v-model="flag" />确认
    30. <input type="submit" v-bind:disabled="show" v-on:click="doSubmit" />
    31. li>
    32. ul>
    33. div>
    34. body>
    35. <script type="text/javascript">
    36. new Vue({
    37. el: '#app',
    38. data() {
    39. return {
    40. uname: null,
    41. upwd: null,
    42. sex: 1,
    43. hobby: [{
    44. id: 1,
    45. name: '篮球'
    46. }, {
    47. id: 2,
    48. name: '足球'
    49. }, {
    50. id: 3,
    51. name: '象棋'
    52. }],
    53. hobbies: [],
    54. address: [{
    55. id: 1,
    56. name: '湖南'
    57. }, {
    58. id: 2,
    59. name: '湖北'
    60. }, {
    61. id: 3,
    62. name: '江西'
    63. }],
    64. myaddress: null,
    65. mark: '学生备注',
    66. flag: false
    67. }
    68. },
    69. computed: {
    70. show: function() {
    71. return !this.flag;
    72. }
    73. },
    74. methods: {
    75. doSubmit: function() {
    76. console.log('doSubmit')
    77. var obj = {
    78. uname: this.uname,
    79. upwd: this.upwd,
    80. age:this.age+10,
    81. sex: this.sex,
    82. hobbies:this.hobbies,
    83. myaddress: this.myaddress,
    84. mark: this.mark,
    85. }
    86. console.log(obj);
    87. }
    88. }
    89. })
    90. script>
    91. html>

    二.自定义组件

    ⭐组件简介

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

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

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

    ⭐全局和局部组件

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

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

    ⭐props

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

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

    ❗注意

       ①:因为组件是可复用的 Vue 实例,所以它们与 new Vue 接收相同的选项,例如 data、              computed、watch、methods 以及生命周期钩子等。仅有的例外是像el这样根实例特              有的选项。

      ②:当我们定义这个 组件时,你可能会发现它的data并不是像这样直接              提供一个对象 (❌)       

    1. data: {
    2.  count: 0
    3.  }

            取而代之的是,一个组件的data选项必须是一个函数,因此每个实例可以维护一份被返          回对象的独立的拷贝()       

    1.  data: function () {
    2.           return {
    3.             count: 0
    4.           }
    5.         }

        ③:定义组件名的方式有两种

              🔺短横线分隔命名(建议使用)

     Vue.component('my-component-name', { /* ... */ }),引用方式:

             🔺首字母大写命名

    1.  Vue.component('MyComponentName', { /* ... */ }),
    2. 引用方式: 和<MyComponentName>都是可接受的

        ④:HTML 中的特性名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字                 符。这意味着当你使用 DOM 中的模板时,

               camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab-case (短横线分隔命名)             命名:

     props: ['postTitle'],<my-tag post-title="hello!">my-tag>

        ⑤:

    props: ['title', 'likes', 'isPublished', 'commentIds', 'author']

    案例

    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. <my-button m="nb">my-button>
    11. <my-button m="nnb">my-button>
    12. div>
    13. body>
    14. <script type="text/javascript">
    15. Vue.component('my-button', {
    16. props:['m'],//定义组件中的变量的
    17. template:'',//代表了自定义组件在页面上显示的内容
    18. data:function(){
    19. return {
    20. n:1
    21. }
    22. },
    23. methods:{
    24. hh(){
    25. this.n++;
    26. }
    27. }
    28. });
    29. new Vue({
    30. el: '#app',
    31. data() {
    32. return {
    33. };
    34. }
    35. })
    36. script>
    37. html>

    三.组件通信

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

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

                

    1. Vue实例->Vue实例,通过prop传递数据
    2. 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. <my-button m="崽崽">my-button>
    11. div>
    12. body>
    13. <script>
    14. var vm = new Vue({
    15. el: "#app",
    16. components: {
    17. 'my-button': {
    18. props: ['m'],
    19. template: '',
    20. data() {
    21. return {
    22. n: 1
    23. };
    24. },
    25. methods: {
    26. clickhuihui() {
    27. this.n++;
    28. }
    29. }
    30. }
    31. }
    32. });
    33. script>
    34. html>

    子传父

    1. 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. <my-button m="夏威" @click="hh">my-button>
    11. div>
    12. body>
    13. <script>
    14. var vm = new Vue({
    15. el: "#app",
    16. components: {
    17. 'my-button': {
    18. props: ['m'],
    19. template: '',
    20. data() {
    21. return {
    22. n: 1
    23. };
    24. },
    25. methods: {
    26. cli() {
    27. this.n++;
    28. }
    29. }
    30. }
    31. },
    32. methods: {
    33. hh(a, b, c) {
    34. console.log(a, b, c);
    35. }
    36. }
    37. });
    38. script>
    39. html>

    好啦,今天的分享就到这了,希望能够帮到你呢!😊😊  

  • 相关阅读:
    [Linux]进程间通信--管道
    java计算机毕业设计人口老龄化常态下的社区老年人管理与服务平台源程序+mysql+系统+lw文档+远程调试
    QTday3
    Windows与网络基础-27-子网掩码
    柏拉图式爱情是同性之爱,绘画是理念世界的二次模仿
    前有 Python 之父加盟微软,后有 Adama 语言创始人发力开源,不甘退休的技术开创者们
    单片机,0.07
    网络安全(黑客)自学
    (14)Zotero:文献管理工具,支持阅读器和翻译插件的私人研究助理
    HuggingFace——Tokenizer的简单记录
  • 原文地址:https://blog.csdn.net/m0_74315688/article/details/133062868