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>

效果:

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

相关文章
|
1天前
|
JavaScript
Vue实战-组件通信
Vue实战-组件通信
4 0
|
1天前
|
JavaScript
Vue实战-将通用组件注册为全局组件
Vue实战-将通用组件注册为全局组件
5 0
|
1天前
|
JavaScript 前端开发
vue的论坛管理模块-文章评论02
vue的论坛管理模块-文章评论02
|
1天前
|
JavaScript Java
vue的论坛管理模块-文章查看-01
vue的论坛管理模块-文章查看-01
|
1天前
|
JavaScript
vue页面加载时同时请求两个接口
vue页面加载时同时请求两个接口
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
987 0
|
1天前
|
JavaScript
vue里样式不起作用的方法,可以通过deep穿透的方式
vue里样式不起作用的方法,可以通过deep穿透的方式
|
1天前
|
移动开发 JavaScript 应用服务中间件
vue打包部署问题
Vue项目`vue.config.js`中,`publicPath`设定为&quot;/h5/party/pc/&quot;,在线环境基于打包后的`dist`目录,而非Linux的`/root`。Nginx代理配置位于`/usr/local/nginx/nginx-1.13.7/conf`,包含两个相关配置图。
vue打包部署问题
|
1天前
|
JavaScript 前端开发
iconfont 图标在vue里的使用
iconfont 图标在vue里的使用
11 0
|
1天前
|
资源调度 JavaScript 前端开发
vue 项目运行过程中出现错误的问题解决
vue 项目运行过程中出现错误的问题解决