迎着风跑  

1、vue中方法的使用

vue的方法除了可以相互调用,还可以直接在插值表达式中调用。


   <div id="app">
       <!--使用插件表达式调用函数-->
       <p>{{show()}}</p>
   </div>
<script>
   let vue=new Vue({
      el:"#app",//挂载点
      data(){
          return {

          }
      } ,methods:{
          //所有的函数都在此处创建
           show(){
               return "我是曹意,曹操是我的兄弟。";
          }
      }
  });
</script>

vue的方法中如果需要使用形参,可以使用[]表示要将哪个形参给方法中的某个代码块使用


  <div id="app">
      <!--使用插件表达式调用函数-->
      <p>{{show(0)}}</p>
  </div>
<script>
  let vue=new Vue({
      el:"#app",//挂载点
      data(){
          return {

          }
      } ,methods:{
          //所有的函数都在此处创建
          show(id){
              //根据id判断
              const aa={
                  0:'我是曹意',
                  1:'我是曹操',
                  2:'我是曹冲'
              }[id]; //将参数id的值,传递给aa使用
              return aa;
          }
      }
  });
</script>

2、this关键字

在vue的方法中要可以使用this关键字来调用已声明的方法,或data中的变量。

在方法中,this 指向该方法所属的组件。可以使用 this 访问 data 对象的属性和其它方法。

 

二、vue中的事件

1、事件

在vue中使用v-on指令为标签绑定事件


语法:
v-on:事件名="函数名"

示例:
  <div id="app">
      <button type="button" v-on:click="btnClick">我是按钮</button>
      <a href="javascript:void(0)" v-on:click="btnClick">我是超链接</a>
      <p>点击了:{{count}}次</p>
  </div>
<script>
  let vue=new Vue({
      el:"#app",//挂载点
      data(){
          return {
              count:0
          }
      } ,methods:{
          /**
            * 在事件中,事件绑定的方法有一个默认的参数
            * event参数表示当前事件的对象
            * event在绑定事件方法时不能有()否则报错
            */
          btnClick(event){
              //点击按钮次数+
              if(event.target.tagName=="BUTTON"){
                  this.count++;
              }

              //点击超链接次数-
              if(event.target.tagName=="A"){
                  this.count--;
              }
              this.count++;
          }
      }
  });
</script>

<font color=red>提示:事件有一个简写方式:@事件名="方法名"</font>


<button type="button" @click="btnClick">我是按钮</button>

2、事件的修饰符

事件的修饰符是用来配置事件的默认行为

  • prevent【常用】

    让超链接不执行href跳转,只执行事件


    <a href="http://www.hao123.com" @click.prevent="acl">我是链接</a>
  • stop【常用】

    stop是用来阻止事件冒泡的。


    <div id="dv1" @click.stop="d1">
              DV1
               <div id="dv2" @click.stop="d2">
                  DV2
                   <div id="dv3" @click.stop="d3">
                      DV3
                   </div>
               </div>
           </div>
  • once

    如果想要只在第一次触发事件的时候触发事件监听器,可以使用 .once 修饰符


    <div id="dv1" @click.once="d1">
  • capture

    如果想要使用捕获模式,可以使用 .capture 修饰符

​ 捕获模式是指事件会在传递到当前元素的下级元素前先出发,这和冒泡模式的事件传播顺序时相反的

  • self

    如果只想监听(父)元素本身而不是它的子元素上触发的事件,可以使用 .self 修饰符

3、键盘修饰符

除了上述事件修饰符,还有一些按键修饰符。它们用在键盘事件上,只有在特定按键按下时才会触发事件。


   <div id="app" v-cloak>

       <form v-on:keyup="btnDown">
          <button type="button">我是按钮</button>
          <input type="text" v-model="tx">
       </form>
   </div>
<script>
   let vue=new Vue({
      el:"#app",//挂载点
      data(){
          return {
              tx:''
          }
      } ,methods:{
           btnDown(event){
              console.log(event.keyCode);
              //回车键
               if(event.keyCode==32){
                   alert("执行了按钮");
              }
               //esc键
               if(event.keyCode==27){
                  this.tx='';
              }
          }
      }
  });
</script>

 

三、vue计算属性

计算属性实际上是一个方法,只要条件改变会自动执行计算,计算属性不能在data中声明


语法:
computed:{
  areg(){ //计算属性
      return this.wh*this.he;
  }
}

计算属性可以被方法或插件表达式直接调用


   <div id="app">
       <p>
          宽:<input type="text" v-model="wh">
          高:<input type="text" v-model="he">
       </p>
       <p>结果是:{{areg}}</p>
   </div>

<script type="text/javascript">
   let vue=new Vue({
       el:"#app",
       data(){
           return {
               wh:0,
               he:0
          }
      },computed:{
           areg(){//计算属性
               return this.wh*this.he;
          }
      }
  })
</script>

 

四、监听器

监听器的作用和计算属性类似,监听器会监听指定的变量是否发生改变,如果发生改变自动执行预设的逻辑代码

  • 基本写法


       <div id="app">
           <p>
              宽:<input type="text" v-model="wh">
              高:<input type="text" v-model="he">
           </p>
       </div>

    <script type="text/javascript">
       let vue=new Vue({
           el:"#app",
           data(){
               return {
                   wh:0,
                   he:0
              }
          },watch:{
               wh(){
                   alert("wh发生了改变");
              },he(){
                   alert("he发生了改变");
              }
          }
      })
    </script>
  • 监听对象中指定的属性


       <div id="app">
           <p>
              姓名:<input type="text" v-model="user.uname">
              性别:<input type="text" v-model="user.sex">
           </p>
       </div>

    <script type="text/javascript">
       let vue=new Vue({
           el:"#app",
           data(){
               return {
                  user:{
                      uname:'',
                      sex:''
                  }
              }
          },watch:{
             'user.uname'(){
                 alert("uname发生了改变");
            },'user.sex'(){
                   alert("sex发生了改变");
              }
          }
      })
    </script>
  • 深度监听(监听对象或数组中的每个元素)

        <div id="app">
           <p>
              姓名:<input type="text" v-model="user.uname">
              性别:<input type="text" v-model="user.sex">
           </p>
       </div>

    <script type="text/javascript">
       let vue=new Vue({
           el:"#app",
           data(){
               return {
                  user:{
                      uname:'',
                      sex:''
                  }
              }
          },watch: {
               user:{
                   handler(us){
                       alert(us.uname+" "+us.sex);
                  },deep:true  //深度监听,相当于递归
              }
          }
      })
    </script>
  • 监听器参数

    当监听器的属性发生变化时,监听器会传入两个参数:所监听属性的当前值

    原来的旧值。


      <div id="app">
          <p>
              姓名:<input type="text" v-model="user.uname">
              性别:<input type="text" v-model="user.sex">
          </p>
      </div>

    <script type="text/javascript">
      let vue=new Vue({
          el:"#app",
          data(){
              return {
                  user:{
                      uname:'',
                      sex:''
                  }
              }
          },watch:{
              //参数一:改变后的值 参数二:改变前的值
            'user.uname'(val,oldVal){
                alert("改变前的值:"+oldVal+"\t"+"改变后的值:"+val);
            }
          }
      })
    </script>

五、过滤器

过滤器可以用来对显示数据的格式进行批量处理。

<font color=red>注意:过滤器『只可以』在插值表达式和 v-bind 指令中使用。通过管道符 | 调用过滤器</font>


<div id="app">
   <p>单价一:{{price1 | pricceTxt}}</p>
   <p>单价一:{{price2 | pricceTxt}}</p>
   <p>单价一:{{price3 | pricceTxt}}</p>
</div>

<script type="text/javascript">
   let vue = new Vue({
       el: "#app",
       data() {
           return {
               price1: 12345,
               price2: 23456,
               price3: 45678,
          }
      },filters:{//编写过滤器
           pricceTxt(value){
               return '¥'+(value/100).toFixed(2);
          }
      }
  })
</script>

<font color=red>提示:过滤器方法默认会将管道符左边的参数传到方法中</font>

 

六、VUE组件

<font color=red>在vue项目中,一般都是单页面项目(一个项目中只有一个html页面)</font>

什么是组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可。

vue中的组件分两种:全局组件,局部组件

 

<font color=red>重要提示:</font>

1、全局组件

全局组件定义好了以后,可以给多个vue实例进行调用


语法:
   <div id="app">
       <a href="">登录</a>
       <a href="">注册</a>

       <!--调用组件 标签的名称要和定义的全局组件名称一致-->
       <Login></Login>
   </div>
<script>

   //定义全局组件
   /**
    * 定义全局组件Login
    *   Login为组件的名称
    */
   Vue.component("Login",{
       /*组件中的模板,要显示的html内容*/
       template: '<div><p>帐号:<input type="text">' +
           '</p><p>密码:<input type="text"></p></div>'
  })

   //vue实例
   let vue=new Vue({
       el:"#app"
  });

</script>

<font color=red>提示:在vue中组件的名称都会识别为小写,如果组件名称为小驼峰,在调用组件时,组件标签的名称要以-隔开且全小写如下写法:</font>


/**
    * 定义全局注册组件
    */
   Vue.component("regFrom",{
       template: '<h1>我是注册组件</h1>'
  })

<!--调用注册组件-->
<reg-from></reg-from>
  • 注意事项:

    组件与组件之间,组件与挂载点之间的数据是完全独立的不会相互影响


       <div id="app">
           <a href="">登录</a>
           <a href="">注册</a>

           <!--调用组件 标签的名称要和定义的全局组件名称一致-->
           <Login></Login>

           <!--调用注册组件-->
           <reg-from></reg-from>
       </div>

    <script>

       //定义全局组件
       /**
        * 定义全局组件Login
        *   Login为组件的名称
        */
       Vue.component("Login",{
           /*组件中的模板,要显示的html内容*/
           template: '<div><p>帐号:<input type="text" v-model="account">' +
               '</p><p>密码:<input type="text" v-model="password"></p></div>',
           data(){
               return {
                   account:'',
                   password:''
              }
          },methods:{
               
          },created(){
               
          }
      })

       Vue.component("regFrom",{
           template: '<h1>我是注册组件</h1>'
      })

       //vue实例
       let vue=new Vue({
           el:"#app",
           data(){
               return {

              }
          }
      });
    </script>

上面编写模板的方式太麻烦,容易出错,可以使用template标签在html中定义好组件的模板,进行引用即可。

<font color=red>提示:template标签不能写在挂载点的里面,必须写在挂载点标签外面</font>


   <div id="app">
       <a href="">登录</a>
       <a href="">注册</a>

       <!--调用组件 标签的名称要和定义的全局组件名称一致-->
       <Login></Login>
   </div>

   <!--编写登录组件的模板-->
   <template id="lg">
       <div>
           <p>帐号:<input type="text" v-model="account">
           <p>密码:<input type="text" v-model="password"></p>

           <p>{{account}} {{password}}</p>
       </div>
   </template>
<script>

   //定义全局组件
   /**
    * 定义全局组件Login
    *   Login为组件的名称
    */
   Vue.component("Login",{
       /*组件中的模板,要显示的html内容*/
       template:'#lg',
       data(){
           return {
               account:'',
               password:''
          }
      },methods:{

      },created(){

      }
  })

   //vue实例
   let vue=new Vue({
       el:"#app",
       data(){
           return {

          }
      }
  });
</script>

 

2、局部组件

  • 写法一


       <div id="app">
           <a href="">登录</a>
           <a href="">注册</a>

           <!--调用组件-->
           <login></login>
       </div>

       <!--编写登录组件的模板-->
       <template id="lg">
           <div>
               <p>帐号:<input type="text" v-model="account">
               <p>密码:<input type="text" v-model="password"></p>

               <p>{{account}} {{password}}</p>
           </div>
       </template>
    <script>
       //vue实例
       let vue=new Vue({
           el:"#app",
           data(){
               return {

              }
          },components:{
               //定义局部组件
               'login':{
                   template: '#lg',
                   data() {
                       return {
                           account:'',
                           password:''
                      };
                  }
              }
          }
      });
    </script>
  • 写法二

  • <div id="app">
    <a href="">登录</a>
    <a href="">注册</a>

    <!--调用组件-->
    <login></login>
    </div>

    <!--编写登录组件的模板-->
    <template id="lg">
    <div>
    <p>帐号:<input type="text" v-model="account">
    <p>密码:<input type="text" v-model="password"></p>

    <p>{{account}} {{password}}</p>
    </div>
    </template>
    <script>
    //定义局部组件
    const login={
    template: '#lg',
    data() {
    return {
    account:'',
    password:''
    };
    }
    }

    //vue实例
    let vue=new Vue({
    el:"#app",
    data(){
    return {
    }
    },components:{
    //注册局部组件
    login
    }
    });
    </script>

posted on 2021-10-19 20:42  迎着风跑  阅读(151)  评论(0编辑  收藏  举报