指令和修饰符

2021-01-24  本文已影响0人  我是Msorry

指令是以 v-为前缀的特殊属性

语法

修饰符

修饰符用于指出一个指令应该以特殊方式绑定

支持修饰符的指令

v-on

v-bind

v-model

.sync修饰符

Vue规则:组件不能修改props外部数据

Vue规则:$emit可以触发事件,把更新的数据作为参数传递出去

Vue规则:$event可以获取$emit传递的参数

//Child.vue
<template>
  <div class="child">
    {{money}}
    <button @click="$emit('update:money', money-100)">
      <span>花钱</span>
    </button>
  </div>
</template>

<script>
export default {
  props: ["money"]
};
</script>


<style>
.child {
  border: 3px solid green;
}
</style>
//App.vue
<template>
  <div class="app">
    App.vue 我现在有 {{total}}
    <hr>
    <Child :money="total" v-on:update:money="total = $event"/>
  </div>
</template>

<script>
import Child from "./Child.vue";
export default {
  data() {
    return { total: 10000 };
  },
  components: { Child: Child }
};
</script>

<style>
.app {
  border: 3px solid red;
  padding: 10px;
}
</style>

上述例子可以理解为 EventBus-订阅/发布 过程,当一个prop被父组件和子组件双向绑定时,如果要修改prop,需要通知Vue,否则多个子组件都去更改的话,无法确定变更来源

在Child上触发事件<button @click="$emit('update:money', money-100)">是发布过程
在Child上监听数据的的<Child :money="total" v-on:update:money="total = $event"/>是订阅过程

:money="total" v-on:update:money="total = $event"可以缩写为:money.sync="total"

注意:使用此种模式,必须写成update:myPropName

总结

清楚4个修饰符

上一篇 下一篇

猜你喜欢

热点阅读