欢迎您 本站地址:  

Vue 实例选项

Vue 中的选项是使用 Options API 时在 Vue 实例上可用的不同选项。

Vue 实例的一些常见选项:

el

挂载点,用于指定 Vue 实例挂载的 DOM 元素:

实例

const app = Vue.createApp({
  // options
});
app.mount('#app');

data

实例

const app = Vue.createApp({
  data() {
    return {
      message: 'Hello Vue!'
    };
  }
});

computed

实例

const app = Vue.createApp({
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    };
  },
  computed: {
    fullName() {
      return `${this.firstName} ${this.lastName}`;
    }
  }
});

methods

实例

const app = Vue.createApp({
  data() {
    return {
      count: 0
    };
  },
  methods: {
    increment() {
      this.count++;
    }
  }
});

watch

实例

const app = Vue.createApp({
  data() {
    return {
      message: 'Hello Vue!'
    };
  },
  watch: {
    message(newValue, oldValue) {
      console.log(`Message changed from ${oldValue} to ${newValue}`);
    }
  }
});

props

以下例子中,MyComponent 接收一个 title 属性,并在模板中使用它:

实例

const MyComponent = {
  props: ['title'],
  template: '<h1>{{ title }}</h1>'
};

const app = Vue.createApp({
  components: {
    'my-component': MyComponent
  },
  template: '<my-component title="Hello Vue 3!"></my-component>'
});

app.mount('#app');

template

实例

const app = Vue.createApp({
  data() {
    return {
      message: 'Hello Vue!'
    };
  },
  template: '<div>{{ message }}</div>'
});

components

components 用于注册局部组件。

实例

const ChildComponent = {
  template: '<div>A child component</div>'
};

const app = Vue.createApp({
  components: {
    'child-component': ChildComponent
  },
  template: '<child-component></child-component>'
}).mount('#app');

provide / inject

父组件提供数据,子组件注入使用。

实例

const ChildComponent = {
  inject: ['message'],
  template: '<div>{{ message }}</div>'
};

const app = Vue.createApp({
  provide() {
    return {
      message: 'Provided Message'
    };
  },
  components: {
    'child-component': ChildComponent
  },
  template: '<child-component></child-component>'
}).mount('#app');

生命周期钩子

beforeCreate

实例初始化之前调用。

实例

const app = Vue.createApp({
  beforeCreate() {
    console.log('beforeCreate');
  }
}).mount('#app');

created

实例创建完成后调用。

实例

const app = Vue.createApp({
  created() {
    console.log('created');
  }
}).mount('#app');

beforeMount

在挂载之前调用。

实例

const app = Vue.createApp({
  beforeMount() {
    console.log('beforeMount');
  }
}).mount('#app');

mounted

实例挂载完成后调用。

实例

const app = Vue.createApp({
  mounted() {
    console.log('mounted');
  }
}).mount('#app');

beforeUpdate

数据更新之前调用。

实例

const app = Vue.createApp({
  data() {
    return {
      message: 'Hello'
    };
  },
  beforeUpdate() {
    console.log('beforeUpdate');
  }
}).mount('#app');

updated

数据更新之后调用。

实例

const app = Vue.createApp({
  data() {
    return {
      message: 'Hello'
    };
  },
  updated() {
    console.log('updated');
  }
}).mount('#app');

beforeUnmount

实例卸载之前调用。

实例

const app = Vue.createApp({
  beforeUnmount() {
    console.log('beforeUnmount');
  }
}).mount('#app');

unmounted

实例卸载之后调用。

实例

const app = Vue.createApp({
  unmounted() {
    console.log('unmounted');
  }
}).mount('#app');

其他选项

directives

注册局部指令。

实例

const app = Vue.createApp({
  directives: {
    focus: {
      mounted(el) {
        el.focus();
      }
    }
  },
  template: '<input v-focus>'
}).mount('#app');

mixins

混入对象。

实例

const myMixin = {
  created() {
    console.log('Mixin created');
  }
};

const app = Vue.createApp({
  mixins: [myMixin],
  created() {
    console.log('Component created');
  }
}).mount('#app');

extends

扩展另一个组件。

实例

const BaseComponent = {
  created() {
    console.log('BaseComponent created');
  }
};

const app = Vue.createApp({
  extends: BaseComponent,
  created() {
    console.log('Extended component created');
  }
}).mount('#app');

inheritAttrs

是否继承父组件的 attribute。

实例

const MyComponent = {
  inheritAttrs: false,
  props: ['title'],
  template: '<div><h1>{{ title }}</h1></div>'
};

const app = Vue.createApp({
  components: {
    'my-component': MyComponent
  },
  template: '<my-component title="Hello" id="app"></my-component>'
}).mount('#app');

setup

用于组合式 API。

实例

const app = Vue.createApp({
  setup() {
    const message = Vue.ref('Hello Vue 3!');
    return { message };
  },
  template: '<h1>{{ message }}</h1>'
}).mount('#app');

expose

在 Vue 3 的组合式 API 中,使用 setup 函数定义组件逻辑时,可以使用 expose 方法来明确指定要暴露给外部的属性和方法。

以下是一个简单的示例,展示如何使用 expose 在 Vue 3 组件中暴露属性和方法:

父组件 (ParentComponent.vue)

<template>
  <div>
    <child-component ref="child"></child-component>
    <button @click="callChildMethod">Call Child Method</button>
  </div>
</template>

<script>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  setup() {
    const child = ref(null);

    const callChildMethod = () => {
      if (child.value) {
        child.value.exposedMethod();
      }
    };

    return {
      child,
      callChildMethod
    };
  }
};
</script>

子组件 (ChildComponent.vue)

<template>
  <div>
    <p>{{ exposedData }}</p>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup(_, { expose }) {
    const exposedData = ref('Hello from Child Component');
   
    const exposedMethod = () => {
      console.log('Child component method called');
    };

    expose({
      exposedData,
      exposedMethod
    });

    return {
      exposedData
    };
  }
};
</script>

说明:

  1. 父组件:

    • 在父组件中,使用 ref 创建了一个对子组件的引用 child
    • callChildMethod 方法中,通过 child.value 访问子组件的实例,并调用子组件暴露的方法 exposedMethod
  2. 子组件:

    • 在子组件的 setup 函数中,通过 ref 创建了一个响应式数据 exposedData
    • 定义了一个方法 exposedMethod,用于展示如何暴露方法。
    • 使用 expose 方法显式地暴露 exposedDataexposedMethod 给父组件。
    • 返回 exposedData,以便在模板中使用。
小库提示

扫描下方二维码,访问手机版。