vue指令

107 阅读1分钟

v-bind :用来动态绑定标签上的属性的值 简写 ":"

<template>
  <div>
    <h1>v-bind</h1>
    <p>{{ name }}</p>
    <!-- <img src="{{imgSrc}}" alt=""> -->
    <!-- 简写 v-bind:动态绑定属性的属性值 -->
    <img :src="imgSrc" alt="" />
  </div>
</template>
<script>
export default {
  data() {
    return {
      name: "尤大大",
      imgSrc: "https://inews.gtimg.com/newsapp_bt/0/14841144507/1000",
    };
  },
};
</script>

v-for :列表渲染,所在标签结构,按照数据数量,循环生成

    <li v-for="(value, propName) in list" :key="propName">
      <a href="#">{{ value.title }}</a>
    </li>
  </div>
</template>
<script>
export default {
  data() {
    return {
      obj: { a: 1, b: 2 },
      arr: [
        { id: 1, name: "小花" },
        { id: 2, name: "小明" },
      ],
      list: [
        { id: 1, title: "新闻1" },
        { id: 2, title: "新闻2" },
      ],
    };
  },
};
</script>

v-text :添加内容,不能识别标签 /v-html:添加内容,可以识别标签

<template>
  <div>
    <h1>v-text v-html</h1>
    <p v-html="str"></p>
    <p v-text="str"></p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      str: "<i>标签</i>",
    };
  },
};
</script>

v-show/v-if;v-show:利用cs3样式设置display显示隐藏/v-if:没有生成这个标签,所有不可见

<template>
  <div>
    <h1>v-if v-show</h1>
    <!-- v-show:设置css样式 display:none 让元素不见 -->
    <!-- v-if:根本没有创建这个元素,所以元素不可见 -->
    <p v-show="isOK">v-show</p>
    <p>v-if</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isOK: false,
    };
  },
};
</script>

v-if-else:多分支语句

template>
  <div>
    <h2>v-if-else</h2>
    <p v-if="mark > 80">优秀</p>
    <p v-else-if="mark >= 60">一般</p>
    <p v-else>不及格</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      mark: 60,
    };
  },
};
</script>

v-on和methods:

v-on 给元素绑定事件 简写@
methods 是一个对象在对象中定义函数
    
<template>
  <div>
    <h1>v-on和methods</h1>
    <p>num:{{ num }}</p>
    <button @click="num = 2">执行少量代码</button>
    <button @click="fn">执行methods中的函数</button>
    <button @click="fn2(100)">执行methods中的函数,传入实参</button>
    <button @click="num *= 2">num * 2</button>
    <button @click="fn3">this</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      num: 1,
    };
  },
  methods: {
    fn: function () {
      console.log("fn");
    },
    fn2(n) {
      console.log(n);
    },
    fn3(n) {
      console.log(this.fn());
    },
  },
};
</script>

v-on事件对象; vue事件处理函数中, 拿到事件对象

<template>
  <div>
    <h1>事件对象</h1>
    <a @click="fn" href="http://www.baidu.com">无参</a>
    <hr />
    <a @click="fn1(100, $event)" href="http://www.baidu.com">有参</a>
  </div>
</template>

<script>
export default {
  methods: {
    fn(e) {
      e.preventDefault();
    },
    fn1(n, e) {
      e.preventDefault();
    },
  },
};
</script>

v-on事件修饰符

语法:<标签 @事件名.修饰符="methods里函数" />
.stop 阻止事件冒泡
.prevent 阻止默认行为
.once 程序运行期间,值触发一次事件处理函数
    
<template>
  <div @click="fnFather">
    <h1>v-on事件修饰符</h1>
    <button @click.stop="fn">阻止冒泡</button>
    <hr />
    <a @click.prevent="fn" href="http://www.baidu.com">我是啊</a>
    <hr />
    <button @click.once="fn">只触发一次</button>
  </div>
</template>

<script>
export default {
  methods: {
    fn() {
      console.log("按钮点击了");
    },
    fnFather() {
      console.log("父元素 点击了");
    },
  },
};
</script>

v-on按键修饰符

目标: 给键盘事件, 添加修饰符, 增强能力
  @keyup.xxx  -  监测按键 
      
<template>
  <div>
    <h1>v-on按键修饰符</h1>
    <!-- 在输入框中按下 回车键+shift 才会执行 -->
    <input @keyup.enter.shift="fn" type="text" />
    <hr />
    <input @keyup.esc="fn" type="text" />
  </div>
</template>

<script>
export default {
  methods: {
    fn() {
      console.log("键盘抬起了");
    },
  },
};
</script>

v-model双向绑定

目标:把value属性和vue数据变量,双向绑定在一起
语法:v-model="data数据变量"
<template>
  <div>
    <h1>v-model双向绑定</h1>
    <!-- 表单元素 v-model="数据" -->
    <!-- 表单元素能接受用户的输入 ===>视图变化===>数据的变化 ===> -->
    <input v-model="name" type="text" />
    <hr />
  </div>
</template>

<script>
export default {
  data() {
    return {
      name: "小花",
    };
  },
};
</script>