Vue3 setup中Provide/Inject/ref获取dom元素的使用
作者:温新
时间:2021-08-22
hi,我是温新,一名PHPer
在 setup()
中使用 provide
时,我们首先从 vue
显式导入 provide
方法。这使我们能够调用 provide
来定义每个 property。
provide
函数允许你通过两个参数定义 property:
- name (
<String>
类型) - value
setup中跨组件数据基础使用
<div id="app">
<son></son>
</div>
<script>
const app = Vue.createApp({
setup() {
const {provide} = Vue;
// 提供所有组件可以直接使用的数据
provide('webName','自如初');
return {}
}
});
app.component('son', {
template:`<div><h3>son</h3>
<p>{{ webName }}</p>
</div>`,
setup() {
// 子组件使用inject使用数据
const {inject} = Vue;
// 接收数据
let webName = inject('webName');
return {webName};
}
});
const vm = app.mount('#app');
</script>
子组件中修改provide提供的数据
其它组件想要修改数据,最好的建议是谁提供的数据谁去修改,也就是说父组件提供的所有组件使用的provide
数据,那么数据的修改最好也是在父组件中完成。
<div id="app">
<son></son>
</div>
<script>
const app = Vue.createApp({
setup() {
const {provide,ref,readonly} = Vue;
let webName = ref('自如初');
// 提供所有组件可以直接使用的数据
provide('webName', readonly(webName));
// 其它组件修改数据走这个方法
provide('changeData', (value) => {
webName.value = value;
});
return {}
}
});
app.component('son', {
template:`<div><h3>son</h3>
<p @click="clickdata">{{ webName }}</p>
</div>`,
setup() {
// 子组件使用inject使用数据
const {inject} = Vue;
// 接收数据
let webName = inject('webName');
// 修改数据的方法
let changeData = inject('changeData');
let clickdata = () => {
// 父组件中使用了readonly,子组件无法直接修改数据
// webName.value = 'ziruchu';
changeData('https://www.ziruchu.com');
}
return {webName,clickdata};
}
});
const vm = app.mount('#app');
</script>
setup中使用red获取dom元素
<div id="app">
<!-- 1、定义ref -->
<div class="content" ref="refdom">
setup中使用ref获取dom元素
</div>
</div>
<script>
const app = Vue.createApp({
setup() {
const {ref,onMounted} = Vue;
// 2、setup中定义ref对象,注意 refdom名称必须一样
let refdom = ref(null);
onMounted(() => {
console.log(refdom.value);
});
return {refdom}
}
});
const vm = app.mount('#app');
</script>
我是温新
每天进步一点,就一点点
请登录后再评论