vue的模板语法(下篇)

简介: vue的模板语法(下篇)

一.事件处理

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

 .stop

 .prevent

 .capture

 .self

 .once

如下:

阻止单击事件冒泡

         <a v-on:click.stop="doThis"></a>

提交事件不再重载页面

         <form v-on:submit.prevent="onSubmit"></form>

修饰符可以串联

         <a v-on:click.stop.prevent="doThat"></a>

只有修饰符

         <form v-on:submit.prevent></form>

添加事件侦听器时使用事件捕获模式

         <div v-on:click.capture="doThis">...</div>

只当事件在该元素本身(而不是子元素)触发时触发回调

         <div v-on:click.self="doThat">...</div>

click 事件只能点击一次

         <a v-on:click.once="doThis"></a>

来看一下单击冒泡事件:

       创建四个容器:
  <!-- 定义边界 -->
    <div id="contect">
      <div class="one"  @click="fun1">
        <div class="two"  @click="fun2">
          <div class="three"  @click="fun3">
            <div class="four" @click="fun4"></div>
          </div>
        </div>
      </div>
    </div>
给它们添加不同的颜色和大小:
<style type="text/css">
      .one{
        background-color: lightpink;
        height: 400px;
        width: 400px;
      }
      .two{
        background-color: cyan;
        height: 300px;
        width: 300px;
      }
      .three{
        background-color: fuchsia;
        height: 200px;
        width: 200px;
      }
      .four{
        background-color: lime;
        height: 100px;
        width: 100px;
      }
    </style>
最后写方法,点击事件:
<script type="text/javascript">
      new Vue({
        el:"#contect",
        data(){
          return{
          };
        },
        methods:{
          fun1(){
            alert("fun1")
          },
          fun2(){
            alert("fun2")
          },
          fun3(){
            alert("fun3")
          },
          fun4(){
            alert("fun4")
          }
        }
      })
    </script>

效果:

这就冒泡事件,如果要阻止,就要通过.stop来实现

效果:

       其他的也是一样的,大家可以试一试!!

二.表单的综合案例

       首先先造一些数据:
<script type="text/javascript">
      new Vue({
        el:"#contect",
        data(){
          return{
            name:"海绵宝宝",
            pwd:"123123",
            sexList:[{
              name:"公",id:1
            },{
              name:"母",id:2
            },{
              name:"未知",id:3
            }],
            sex:"1",
            hobby:[{
              name:"吹泡泡",id:1
            },{
              name:"抓水母",id:2
            },{
              name:"做蟹堡",id:3
            }],
              myHobby:[],
            address:[{
              name:"太平洋",id:1
            },{
              name:"大西洋",id:2
            },{
              name:"北冰洋",id:3
            },{
              name:"印度洋",id:4
            }],
            myAddr:null,
            sign:null,
            ok:false
          };
        }
      })
    </script>
接着搭建界面;
<!-- 定义边界 -->
    <div id="contect">
      姓名:<input name="name" v-model="name"/><br />
      密码:<input type="password" v-model="pwd"/><br />
      性别:<span v-for="s in sexList">
        <input type="radio" name="sex" v-model="sex" :value="s.id"/>{{s.name}}
      </span><br />
      地址:<select name="myAddr" v-model="myAddr" >
        <option v-for="a in address" :value="a.id">{{a.name}}</option>
      </select><br />
      爱好:<span v-for="h in hobby"  >
        <input type="checkbox"  v-model="myHobby" name="myHobby":value="h.id"/>{{h.name}}
      </span><br />
      个人简介:<textarea v-model="sign" cols="18" rows="4"></textarea> <br />
      同意:<input type="checkbox" v-model="ok"/><br />
    <button v-show="ok" @click="submit()"> 提交</button>
    </div>
   
 搭建好之后就来写方法,  保存json格式数据
methods:{
          submit(){
            var obj={};
            obj.name=this.name;
            obj.pwd=this.pwd;
            obj.sex=this.sex;
            obj.address=this.myAddr;
            obj.hobby=this.myHobby;
            obj.sign=this.sign;
            console.info(obj);
          }
        }

最后打印看结果:

三.组件通信⭐⭐

       3.1 自定义组件

       原本是没有<my-button>这个按钮属性
<div id="contect">
      <p>自定义组件</p>
      <my-button>我的按钮</my-button>
    </div>
       写方法实现:
<script type="text/javascript">
      new Vue({
        el:"#contect",
        components:{
          "my-button":{
            template:"<button>{{我的按钮}}</button>"
          }
        },
      })
    </script>

3.2 组件通信之父传子

--父组件向子组件传递数据(props)和子组件向父组件传递数据(事件)

在父组件中,可以通过在子组件标签上使用属性来传递数据。子组件可以通过在组件定义的选项中声明 props 来接收父组件传递的数据
加了一个属性,me
<!-- 定义边界 -->
    <div id="contect">
      <p>组件通信父传子</p>
      <my-button me="潇洒姿"></my-button>
    </div>
<script type="text/javascript">
      new Vue({
        el:"#contect",
        components:{
          "my-button":{
            props:["me"],
            template:"<button>{{me}}</button>"
          }
        }
      })
    </script>

3.3组件通信之子传父

      在子组件中,可以通过触发自定义事件来将数据传递给父组件。父组件可以通过在子组件标签上监听对应的事件来接收子组件传递的数据。

<div id="contect">
      <p>组件通信子传父</p>
      <my-button me="潇洒姿" @xxx="getParam"></my-button>
    </div>
<script type="text/javascript">
      new Vue({
        el:"#contect",
        components:{
          "my-button":{
            props:["me"],
            template:"<button @click='clickMe'>{{me}}</button>",
            methods:{
              clickMe(){
                let name="张三";
                let bname="我的高中暗恋故事";
                let price="无价";
                this.$emit("xxx",name,bname,price)
              }
            }
          }
        },
        methods:{
          getParam(a,b,c){
            console.info(a,b,c);
          }
          }
      })
    </script>

效果:

今天的分享就到这啦!!!

相关文章
|
5天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
5天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
5天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
4天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
4天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
|
19天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
5天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
6天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
6天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
11天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发