• vue模板语法下集


    目录

    一、事件处理器

    二、自定义组件 

    三、组件通信 


    一、事件处理器

    1、事件修饰符

    事件修饰符
    Vue通过由点(.)表示的指令后缀来调用修饰符,
    .stop
    .prevent
    .capture
    .self
    .once
    事件冒泡 -->
    a v-on:click.stop=“doThis”>

    form v-on:submit.prevent=“onSubmit”>
    <-- 修饰符可以串联 -->
    a v-on:click.stop.prevent=“doThat”>
    <-- 只有修饰符 -->
    form v-on:submit.prevent>
    <-- 添加事件侦听器时使用事件捕获模式 -->
    div v-on:click.capture=“doThis”>…
    <-- 只当事件在该元素本身(而不是子元素)触发时触发回调 -->
    div v-on:click.self=“doThat”>…
    <-- click 事件只能点击一次 -->
    a v-on:click.once=“doThis”>

    2、什么是事件冒泡

    3、按键修饰符 

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

    input v-on:keyup.13=“submit”>
    Vue为最常用的按键提供了别名
    <-- 同上 -->
    input v-on:keyup.enter=“submit”>
    全部的按键别名:
    .enter
    .tab
    .delete (捕获 “删除” 和 “退格” 键)
    .esc
    .space
    .up
    .down
    .left
    .right
    .ctrl
    .alt
    .shift
    .meta

    4、代码

    ①样式绑定

     

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

     

     ​​​​​​​

     

    ③表单 

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

    二、自定义组件 

    vue组件
    5.1 组件简介
    组件(Component)是Vue最强大的功能之一
    组件可以扩展HTML元素,封装可重用的代码
    组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树
    5.2 全局和局部组件
    全局组件:Vue.component(tagName, options),tagName为组件名,options为配置选项。
    局部组件: new Vue({el:‘#d1’,components:{…}})
    注册后,我们可以使用以下方式来调用组件:
    tagName>/tagName>
    5.3 props
    props是父组件用来传递数据的一个自定义属性。
    父组件的数据需要通过props把数据传给子组件,子组件需要显式地用props选项声明 “prop”
    注1:因为组件是可复用的 Vue 实例,所以它们与 new Vue 接收相同的选项,例如 data、computed、watch、methods
    以及生命周期钩子等。仅有的例外是像el这样根实例特有的选项。
    注2:当我们定义这个 组件时,你可能会发现它的data并不是像这样直接提供一个对象
    data: {
    count: 0
    }
    取而代之的是,一个组件的data选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝:
    data: function () {
    return {
    count: 0
    }
    }
    注3:定义组件名的方式有两种
    短横线分隔命名(建议使用)
    Vue.component(‘my-component-name’, { /* … / }),引用方式:
    首字母大写命名
    Vue.component(‘MyComponentName’, { / … */ }),引用方式: my-component-name>和MyComponentName>都是可接受的
    注4:HTML 中的特性名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符。这意味着当你使用 DOM 中的模板时,
    camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab-case (短横线分隔命名) 命名:
    props: [‘postTitle’],my-tag post-title=“hello!”>/my-tag>
    注5:props: [‘title’, ‘likes’, ‘isPublished’, ‘commentIds’, ‘author’]
    希望每个 prop 都有指定的值类型
    props: {
    title: String,
    likes: Number,
    isPublished: Boolean,
    commentIds: Array,
    author: Object,
    callback: Function,
    contactsPromise: Promise // or any other constructor

    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. .f200{
    9. font-size: 200px;
    10. }
    11. style>
    12. head>
    13. <body>
    14. <div id="app">
    15. <my-button m="aa">my-button>
    16. <my-button m="bb">my-button>
    17. div>
    18. body>
    19. <script type="text/javascript">
    20. // 定义全局组件的方式
    21. Vue.component("my-button",{
    22. // props是定义组件中的变量的
    23. props:["m"],
    24. // template代表了自定义组件在页面上显示的内容
    25. template:'',
    26. data:function(){
    27. return{
    28. n:1
    29. }
    30. },
    31. methods:{
    32. incrn(){
    33. this.n++;
    34. }
    35. }
    36. })
    37. new Vue({
    38. el:'#app',
    39. data(){
    40. return {
    41. };
    42. }
    43. })
    44. script>
    45. html>

     

    三、组件通信 

     自定义事件
    监听事件:美元符号on(eventName)
    触发事件:$emit(eventName)
    注1:Vue自定义事件是为组件间通信设计
    vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定
    父Vue实例->Vue实例,通过prop传递数据
    子Vue实例->父Vue实例,通过事件传递数据
    注2:事件名
    不同于组件和prop,事件名不存在任何自动化的大小写转换。而是触发的事件名需要完全匹配监听这个事件所用的名称
    建议使用“短横线分隔命名”,例如:three-click

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js">script>
    7. head>
    8. <body>
    9. <div id="app">
    10. <ul>
    11. <li>
    12. <h3>{{ts}}h3>
    13. <p>vue组件p>
    14. <my-button m="aa" v-on:three-click="xxx">my-button>
    15. li>
    16. ul>
    17. div>
    18. body>
    19. <script>
    20. // 定义全局组件的方式
    21. Vue.component('my-button', {
    22. props: ['m'],
    23. template: '',
    24. data: function() {
    25. return {
    26. n: 0
    27. };
    28. },
    29. methods: {
    30. doClickMyButton: function() {
    31. console.log('doClickMyButton方法被调用');
    32. this.n++;
    33. if (this.n % 3 == 0) {
    34. // 触发自定义组件定义的事件,这里可以传递任意个参数
    35. // 但是触发的事件绑定的函数要与参数个数一致
    36. this.$emit('three-click', this.n, 'http://www.javaxl.com', 'aa');
    37. }
    38. }
    39. }
    40. })
    41. var vm = new Vue({
    42. el: "#app",
    43. data: {
    44. ts: new Date().getTime()
    45. },
    46. methods: {
    47. // 当子组件传值父组件时,只需要在父组件的方法中定义参数即可
    48. xxx: function(a, b, c) {
    49. console.log("自定义事件绑定的函数被执行...")
    50. console.log(a);
    51. console.log(b);
    52. console.log(c);
    53. }
    54. }
    55. });
    56. script>
    57. html>

     

     

  • 相关阅读:
    css实现水平垂直居中的七种方式
    聚观早报 | 黑五电子产品销售额飙升;谷歌不满微软收购动视暴雪
    <数据集>腐烂水果识别数据集<目标检测>
    【Python】Python列表排序 list.sort方法和内置函数sorted用法
    sm2加密算法
    开发Chrome 插件赚钱的7个主要方式(Chrome Extension )
    3分钟火速手写一个二叉查找树,搞快点。
    echarts 横向柱状图示例
    C专家编程 第6章 运行的诗章:运行时数据结构 6.10 MS-DOS中的堆栈段
    将音频格式从flac转到wav的两种方法
  • 原文地址:https://blog.csdn.net/qq_44247968/article/details/126700805