vue 之 基础知识(@的使用)

(1) 文本插值 {{}}

      {{ 表达式(有返回值) }}  

(2) v-bind  一般用在属性上

    1> <innput type="text" :value="val">

    2><img :src="url"/>     url:'../assets/logo.png'    会出现图片不显示问题   

src: require("../assets/logo.png"),

    扩展:语法糖:  v-bing:title="title"   可以简写为   :title="title"

(3)v-on指令 绑定事件  

     1>三种写法:

      第一种:内联语句  (注意:只能写简单的表达式且console.log('111'),这种语句会报错)

<button v-on:click="isShow = true">点击</button>
<span v-show="isShow">测试内容</span>

  第二种:定义的方法放在methods中

<button @click="fn">调用methods中的方法</button>

  第三种:定义的方法放在methods中,传参

<button @click="fn1('123', $event)">第三种</button>

fn1(res, e) {
      console.log(res, e);
}

或者是
<button @click="fn2">第四种</button>
fn1(e) {
   console.log(e);
}


     扩展:语法糖: v-on:click="fn"    可以简写为     @click="fn"

 (4) 事件修饰符

   1> @click.prevent  阻止默认行为

<a href="http://baidu.com" @click.prevent="fn5"></a>

 2>@click.prevent.stop  或者  @click.stop   阻止冒泡 

    3>@keyup.13,  @keyup.enter 等等     按键修饰符,监听用户键盘

(5) 条件渲染指令

   1> v-if   v-else-if    v-else

    2>v-show

(6)v-model  双向绑定,主要是给表单元素来使用

    1>文本框   

<input type="text" v-model="message" />

    2>单选框 

<input type="radio" value="男" v-model="sex" />男
<input type="radio" value="女" v-model="sex" />女

 3>下拉框

<select name="city" id="city" v-model="city">
      <option value="bj">北京</option>
      <option value="sh">上海</option>
      <option value="hz">杭州</option>
</select>

(7)v-model 双向绑定 修饰符

    1>v-model.number   如果想自动将用户输入值,parseFloat转成数字类型,可用.number修饰符  

<input type="number" v-model.number="age" />

 2>v-model.trim  自动过滤用户输入的首尾空白字符 

<input type="text" v-model.trim="message" />

 3>v-model.lazy 在change时而非input时更新,通过lazy修饰符

<input type="text" v-model.lazy="msg" />

(8)v-text 和 v-html

<h2 v-text="message"></h2>
<h2 v-html="message"></h2>

(9) v-for 的使用

   1>第一种

<ul>
      <li v-for="item in citys" :key="item">{{ item }}</li>
</ul>
citys: ["北京", "上海", "深圳", "杭州"],

 2>第二种

<ul>
      <li v-for="(item, index) in persons" :key="index">
        {{ item.name }}
      </li>
</ul>

  

(10) computed 计算属性

  1.写起来像一个方法

  2.用起来像一个属性

  3.计算属性不要和data里面的属性

computed: {
    totalPrice() {
      let res = 0;
      this.list.forEach((item) => {
        res += item.price;
      });
      return res;
    },
    svg() {
      console.log(this.totalPrice);
      console.log(this.list.length);
      return this.totalPrice / this.list.length;
    }
  }

        <td colspan="2">总价钱:{{ totalPrice }}</td>

 (11) 过滤器

第一种:全局

Vue.filter("date", (val, type = "YYYY-MM-DD") => {
  return moment(val).format(type);
});  

第二种:局部

filters: {
    date1: function(val) {
      return moment(val).format("YYYY-MM-DD");
    },
  },

(12)自定义指令

  1>全局指令

   Vue.directive('red',{

  inserted:function(el){

          el.style.color:'red'

      }

  })

  2>局部指令

directives: {
    focus: {
      inserted(el) {
        el.focus();
      },
    },
  },

(13)监听

   1> 监听简单类型

watch:{
    msg:(newVal)
   {
       console.log('msg有变化')
   }  
}

 2>监听复杂类型之对象

watch:{
   obj:{
      deep:true,//深度监听
immediate:true ,//立即监听 页面刷新也会监听 handler(newObj){ console.log('监听成功') } } }
或者
watch:{
    'obj.name'(newName){
     console.log('哈哈'+newName)
} } }

  3> 监听复杂类型之数组

list:{
    deep:true,
    handle(newList){
       console.log(newList)
   }  
}
或者
list(newList)
{
console.log(newList)
}

  

(14)组件

  1>注册全局组件

  Vue.component("my-cpn", cpnC);  

  2>注册局部组件

 var vm = new Vue({
     el: "#app",
     data: {},
     components: {
       cpn: cpnC, //重要代码
     },
 });

  

  3>父子组件

 <1>父传子

 第一步:子组件写props

     1/ 可以是数组 ['name','age']

     2/可以是对象

props:{
propE:{ type:Object,或者可以是其他数据类型 require:false default:function(){ return {message:'hello'} } } }

第二步:在子组件上写参数

<son :cname="name" :cage="age" :cobjects="objects">

  

 <2>子传父

 第一步:子组件触发自定义事件

 this..$emit('my-click',xxx)

第二步:给子组件添加自定义事件,并且绑定事件处理函数

<child @my-click='fn'></child>

第三步:触发自定义事件,函数会被调用

fn(xxx){

   ...

}

propE:{

type:Object,

require:false

default:function(){

return {message:'hello'}

}

}

 

 

vue中绝对路径@的使用

@指代src目录  

在script 和 template中直接使用

<script>
  import Login from '../views/Login'
  import Login from '@/views/Login'
</script>

<template>
   <img src='../../assets/1.jpg'></img>
   <img src='@/assets/1.jpg' alt="">
</template>

 在<style里面使用不一样

body{
   background:url(../assets/1.jpg)
   background:url(~@/assets/1.jpg)
  
}

  

 

 

 

原文地址:https://www.cnblogs.com/zmztya/p/14455120.html