Vue3 详细教程及实例(完整版)

简介: Vue3 详细教程及实例(完整版)

Vue3 详细教程及实例

文本插值

数据绑定的沟通形式是使用“Mustache”语法(双花字符串)进行文本插值:

在 Uniapp 中,我们可以使用 Vue3 的语法来实现文本插值。以下是一个简单的实例:

  1. 首先,我们需要在 <template> 标签内创建一个文本插值的模板:
<template>
  <view>
    <text>{{ message }}</text>
  </view>
</template>
  1. 然后,在 <script> 标签内的 setup() 函数中定义一个变量 message,并为其赋值:
<script>
import { ref } from 'vue';
export default {
  setup() {
    const message = ref('Hello, Uniapp!'); // 定义一个响应式变量 message,并为其赋值 "Hello, Uniapp!"
    return {
      message, // 将 message 暴露给模板使用
    };
  },
};
</script>

在这个实例中,我们使用了 Vue3 的 ref 函数来创建一个响应式变量 message,并将其值设置为 “Hello, Uniapp!”。然后,我们将 message 暴露给模板使用,以便在模板中使用文本插值显示该变量的值。最后,在模板中的 <text> 标签内使用双大括号 {{ }} 进行文本插值,显示 message 变量的值。

属性绑定

v-bind指令
<template>
  <div>
    <button v-bind:disabled="isButtonDisabled">点击我</button>
  </div>
</template>
<script>
import { ref } from 'vue';
export default {
  setup() {
    const isButtonDisabled = ref(false);
    return {
      isButtonDisabled,
    };
  },
};
</script>

在这个例子中,我们使用 v-bind:disabledisButtonDisabled 的值绑定到按钮的 disabled 属性上。当 isButtonDisabledtrue 时,按钮将被禁用;当 isButtonDisabledfalse 时,按钮将被启用。

布尔属性

使用v-bind指令将布尔属性绑定到元素上。以下是一个简单的实例:

<template>
  <view class="container">
    <text v-bind:is="isActive">{{ message }}</text>
    <button @click="toggleActive">切换激活状态</button>
  </view>
</template>
<script>
import { ref } from 'vue';
export default {
  setup() {
    const isActive = ref(false);
    const message = ref('Hello, uniapp!');
    function toggleActive() {
      isActive.value = !isActive.value;
    }
    return {
      isActive,
      message,
      toggleActive,
    };
  },
};
</script>
<style scoped>
.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100%;
}
</style>

在这个例子中,我们使用v-bind:is指令将isActive的值绑定到一个名为is的属性上。当isActivetrue时,<text>元素的is属性会被设置为"active",使其显示为激活状态。

动态绑定多个属性

可以使用v-bind指令将多个属性动态绑定到元素上。以下是一个简单的实例:

<template>
  <view class="container">
    <text v-bind="dynamicProps">{{ message }}</text>
    <button @click="toggleActive">切换激活状态</button>
  </view>
</template>
<script>
import { ref } from 'vue';
export default {
  setup() {
    const isActive = ref(false);
    const message = ref('Hello, uniapp!');
    const dynamicProps = computed(() => ({
      class: isActive.value ? 'active' : '',
      'aria-label': message.value,
    }));
    function toggleActive() {
      isActive.value = !isActive.value;
    }
    return {
      isActive,
      message,
      dynamicProps,
      toggleActive,
    };
  },
};
</script>
<style scoped>
.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100%;
}
.active {
  color: red;
}
</style>

在这个例子中,我们使用computed函数创建了一个名为dynamicProps的计算属性,它根据isActivemessage的值动态生成一个包含多个属性的对象。然后,我们使用v-bind指令将这些动态属性绑定到<text>元素上。

JavaScript 表达式
  1. 确保你已经安装了UniApp的开发环境,并且配置了Vue3的支持。
  2. 在你的UniApp项目中创建一个Vue组件,可以使用Vue3的Composition API。
  3. 在组件的setup函数中,你可以定义和使用JavaScript表达式。

下面是一个使用JavaScript表达式在UniApp中使用Vue3的示例:

<template>  
  <view>  
    <!-- 使用JavaScript表达式 -->  
    <text>{{ message + ' World!' }}</text>  
  </view>  
</template>  
<script>  
import { ref } from 'vue';  
export default {  
  setup() {  
    // 创建一个响应式的数据引用  
    const message = ref('Hello');  
    // 使用JavaScript表达式,将响应式数据引用与字符串拼接  
    const expression = () => {  
      return message.value + ' World!';  
    };  
    // 将表达式返回给模板使用  
    return {  
      expression,  
    };  
  },  
};  
</script>

在上面的示例中,我们使用了Vue3的ref函数创建了一个响应式的数据引用message,并将其设置为'Hello'。然后,在setup函数中定义了一个JavaScript表达式expression,它将响应式数据引用message.value与字符串' World!'进行拼接。最后,我们将表达式返回给模板中的<text>组件进行显示。

请注意,这只是一个简单的示例,你可以根据自己的需求在UniApp中使用更复杂的JavaScript表达式和Vue3的功能。

调用函数

如何在UniApp中使用Vue3调用函数:

<template>  
  <view>  
    <!-- 调用函数 -->  
    <button @click="greet">点击问候</button>  
    <text>{{ greeting }}</text>  
  </view>  
</template>  
<script>  
import { ref } from 'vue';  
export default {  
  setup() {  
    // 创建一个响应式的数据引用  
    const greeting = ref('');  
    // 定义函数  
    const greet = () => {  
      greeting.value = 'Hello, UniApp!';  
    };  
    // 将函数和数据返回给模板使用  
    return {  
      greet,  
      greeting,  
    };  
  },  
};  
</script>

在上面的示例中,我们首先创建了一个响应式的数据引用greeting,并将其初始值设置为空字符串。然后,在setup函数中定义了一个名为greet的函数。该函数在被调用时,会将greeting的值设置为'Hello, UniApp!'。接下来,我们在模板中创建了一个按钮,并绑定了点击事件@clickgreet函数上。当用户点击按钮时,greet函数会被调用并执行相应的操作。最后,我们在模板中使用了插值表达式{{ greeting }}来显示问候语。

请注意,这只是一个简单的示例,你可以根据自己的需求在UniApp中使用更复杂的函数调用和逻辑。此外,还可以使用Vue3的其他功能,如计算属性、侦听器等来扩展你的组件功能。

全局访问

下面是一个示例,演示了如何在UniApp中使用Vue3框架进行全局访问:

首先,创建一个全局状态管理模块。在global.js文件中,我们可以定义一些全局状态和函数:

// global.js  
import { ref, reactive } from 'vue';  
export const useGlobalState = () => {  
  const state = reactive({  
    // 全局状态  
    message: 'Hello, UniApp!',  
  });  
  const setMessage = (newMessage) => {  
    state.message = newMessage;  
  };  
  return {  
    state,  
    setMessage,  
  };  
};

然后,在需要全局访问的地方,导入并使用useGlobalState

<template>  
  <view>  
    <!-- 访问全局状态 -->  
    <text>{{ globalState.message }}</text>  
    <!-- 调用全局函数 -->  
    <button @click="setGlobalMessage">设置全局消息</button>  
  </view>  
</template>  
<script>  
import { useGlobalState } from './global.js';  
export default {  
  setup() {  
    const globalState = useGlobalState();  
    const setGlobalMessage = () => {  
      globalState.setMessage('New global message');  
    };  
    return {  
      globalState,  
      setGlobalMessage,  
    };  
  },  
};  
</script>

在上面的示例中,我们首先导入了useGlobalState函数,并在setup函数中调用它。然后,我们可以在模板中直接访问全局状态globalState.message,以及通过按钮点击调用全局函数setGlobalMessage来更新全局状态。这样,我们就可以在UniApp中的任何组件中访问和修改全局状态了。

指令

下面是一个示例,演示了如何在UniApp中使用Vue3的指令:

<template>  
  <view>  
    <!-- 使用指令 -->  
    <text v-show="isVisible" @click="toggleVisibility">点击隐藏/显示</text>  
    <button v-on:click="incrementCount">点击增加</button>  
    <text>{{ count }}</text>  
  </view>  
</template>  
<script>  
import { ref } from 'vue';  
export default {  
  setup() {  
    // 创建一个响应式的数据引用  
    const isVisible = ref(true);  
    const count = ref(0);  
    // 定义指令的处理函数  
    const toggleVisibility = () => {  
      isVisible.value = !isVisible.value;  
    };  
    const incrementCount = () => {  
      count.value++;  
    };  
    // 将指令和处理函数返回给模板使用  
    return {  
      isVisible,  
      count,  
      toggleVisibility,  
      incrementCount,  
    };  
  },  
};  
</script>

在上面的示例中,我们使用了Vue3的v-show指令来控制文本元素的显示与隐藏。v-show指令根据表达式的值来切换元素的display样式。当isVisible的值为true时,文本元素会显示;当isVisible的值为false时,文本元素会隐藏。同时,我们给文本元素绑定了一个点击事件@click,当点击时调用toggleVisibility函数来切换isVisible的值。此外,我们还使用了v-on:click指令来给按钮元素绑定了一个点击事件,当点击时调用incrementCount函数来增加计数值。最后,我们在模板中使用了插值表达式{{ count }}来显示计数值。

请注意,这只是一个简单的示例,你可以根据自己的需求在UniApp中使用更复杂的指令和逻辑。Vue3提供了丰富的指令集,如条件渲染指令v-if、循环渲染指令v-for等,你可以根据具体场景选择合适的指令来实现你的需求。

论点

下面是一个示例,演示了如何在UniApp中使用Vue3框架创建论点:

<template>  
  <view>  
    <text>{{ segments[currentSegment].content }}</text>  
  </view>  
</template>  
<script>  
import { ref, computed } from 'vue';  
export default {  
  setup() {  
    // 创建一个响应式的数据引用  
    const segments = ref([  
      { content: '这是第一段内容' },  
      { content: '这是第二段内容' },  
      { content: '这是第三段内容' }  
    ]);  
    const currentSegment = ref(0); // 当前显示的段落的索引  
    // 定义一个计算属性,返回当前显示的段落的content  
    const displayedContent = computed(() => {  
      return segments.value[currentSegment.value].content;  
    });  
    // 定义一个方法,用来切换到下一个段落  
    const nextSegment = () => {  
      currentSegment.value = (currentSegment.value + 1) % segments.value.length;  
    };  
    // 将数据和方法返回给模板使用  
    return {  
      segments,  
      currentSegment,  
      displayedContent,  
      nextSegment,  
    };  
  },  
};  
</script>

在上面的示例中,我们首先创建了一个名为segments的响应式数据引用,其中包含了三个分段的内容。然后,我们创建了一个名为currentSegment的响应式数据引用,用于表示当前显示的段落的索引。接着,我们定义了一个计算属性displayedContent,用于计算并返回当前显示的段落的content。最后,我们定义了一个名为nextSegment的方法,用于切换到下一个段落。在模板中,我们使用{{ displayedContent }}来显示当前段落的content。

动态参数

下面是一个示例,演示了如何在UniApp中使用Vue3框架使用动态参数:

<template>  
  <view>  
    <text>{{ dynamicText }}</text>  
    <button @click="changeText">点击改变文本</button>  
  </view>  
</template>  
<script>  
export default {  
  setup() {  
    const dynamicText = ref(''); // 创建一个响应式的数据引用,用于存储动态文本  
    // 定义一个方法,用于改变动态文本的值  
    const changeText = () => {  
      dynamicText.value = '你已经点击了按钮!';  
    };  
    // 将数据和方法返回给模板使用  
    return {  
      dynamicText,  
      changeText,  
    };  
  },  
};  
</script>

在上面的示例中,我们首先创建了一个响应式的数据引用dynamicText,用于存储动态文本。然后,我们定义了一个名为changeText的方法,用于改变dynamicText的值。在模板中,我们使用插值表达式{{ dynamicText }}来显示动态文本,并给按钮元素绑定了一个点击事件@click="changeText",当点击按钮时调用changeText方法来改变动态文本的值。这样,我们就可以根据实际需求传入不同的参数来更新动态文本的展示了。

修饰符

下面是一个示例,演示了如何在UniApp中使用Vue3框架使用修饰符:

<template>  
  <view>  
    <button @click="toggleVisibility ^ :disabled=isDisabled">点击切换显示状态</button>  
    <text>{{ isVisible ? '显示' : '隐藏' }}</text>  
  </view>  
</template>  
<script>  
export default {  
  setup() {  
    const isVisible = ref(true);  
    const isDisabled = ref(false);  
    const toggleVisibility = () => {  
      isVisible.value = !isVisible.value;  
    };  
    return {  
      isVisible,  
      isDisabled,  
      toggleVisibility,  
    };  
  },  
};  
</script>

在上面的示例中,我们使用了Vue3的组合式API来创建一个响应式的数据引用isVisible,表示元素的可见性。我们还创建了一个响应式的数据引用isDisabled,用于控制按钮的禁用状态。在模板中,我们给按钮元素绑定了一个点击事件@click="toggleVisibility ^ :disabled=isDisabled",其中^修饰符表示在捕获阶段触发事件,这样可以确保在事件处理程序执行之前阻止冒泡。同时,我们使用了v-bind指令来动态绑定按钮的禁用属性,根据isDisabled的值来决定是否禁用按钮。最后,我们在模板中使用了插值表达式{{ isVisible ? '显示' : '隐藏' }}来显示当前元素的可见性状态。

声明反应状态ref()

下面是一个示例,演示了如何在UniApp中使用Vue3框架使用声明反应状态ref()

vue复制代码
<template>  
  <view>  
    <text>{{ message }}</text>  
    <button @click="changeMessage">点击改变文本</button>  
  </view>  
</template>  
<script>  
export default {  
  setup() {  
    const message = ref('Hello, UniApp!'); // 创建一个响应式的数据引用,初始值为'Hello, UniApp!'  
    // 定义一个方法,用于改变message的值  
    const changeMessage = () => {  
      message.value = '你已经点击了按钮!';  
    };  
    // 将数据和方法返回给模板使用  
    return {  
      message,  
      changeMessage,  
    };  
  },  
};  
</script>

在上面的示例中,我们使用ref()函数创建了一个响应式的数据引用message,初始值为’Hello, UniApp!'。然后,我们定义了一个名为changeMessage的方法,用于改变message的值。在模板中,我们使用插值表达式{{ message }}来显示message的值,并给按钮元素绑定了一个点击事件@click="changeMessage",当点击按钮时调用changeMessage方法来改变message的值。这样,我们就可以通过访问message.value来获取或修改message的值,并实现响应式数据的更新。

简化用法<script setup>

下面是一个示例,演示了如何在UniApp中使用<script setup>

<template>  
  <view>  
    <text>{{ message }}</text>  
    <button @click="changeMessage">点击改变文本</button>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const message = ref('Hello, UniApp!'); // 创建一个响应式的数据引用,初始值为'Hello, UniApp!'  
// 定义一个方法,用于改变message的值  
const changeMessage = () => {  
  message.value = '你已经点击了按钮!';  
};  
</script>

在上面的示例中,我们使用了<script setup>来编写组件的逻辑。在<script setup>块中,我们可以直接导入需要的函数和模块,例如ref()函数。然后,我们创建了一个响应式的数据引用message,并定义了一个方法changeMessage来改变message的值。这些变量和方法会自动暴露给模板使用,因此我们不需要在<script>块中显式地导出它们。

需要注意的是,<script setup>块中的代码会在组件实例化之前执行,因此我们不能在其中访问组件实例的属性或方法。如果需要在组件实例化后执行某些逻辑,可以将它们放在<script>块中。同时,<script setup>块中的代码也不能使用this关键字来访问组件实例。

通过使用<script setup>,我们可以更简洁地编写组件的逻辑,并避免一些繁琐的语法和导出操作。这对于小型组件或简单的界面逻辑尤为方便。

DOM 更新完成nextTick()

下面是一个示例,演示了如何在UniApp中使用Vue3框架使用nextTick()

<template>  
  <view>  
    <button @click="changeText">点击改变文本</button>  
    <text>{{ message }}</text>  
  </view>  
</template>  
<script setup>  
import { ref, nextTick } from 'vue';  
const message = ref('');  
const changeText = async () => {  
  message.value = '正在改变文本...';  
  await nextTick();  
  console.log('文本已经改变,可以执行后续操作');  
  // 在这里执行需要在DOM更新完成后才执行的操作  
};  
</script>

在上面的示例中,我们使用了nextTick()函数来延迟执行某些操作。在changeText方法中,我们首先改变了message的值,然后调用nextTick()函数来等待DOM更新完成。通过await关键字等待nextTick()的返回,确保在DOM更新完成后再执行后续的操作。在示例中,我们只是简单地打印了一条消息,但你可以根据实际需求来执行其他操作。

需要注意的是,nextTick()函数返回一个Promise对象,因此我们可以使用await关键字来等待其执行完成。另外,如果你在nextTick()函数外部使用了其他异步操作,例如setTimeout()Promise.then()等,它们可能会在DOM更新完成之前执行完成,因此你需要谨慎处理异步操作的顺序和时机。

通过使用nextTick()函数,我们可以确保在DOM更新完成后再执行某些操作,从而避免由于DOM还未更新导致的问题。这对于需要在DOM更新后执行动画、获取元素尺寸等操作非常有用。

响应式对象reactive()

在UniApp中使用Vue3框架时,你可以使用reactive()函数来创建一个响应式对象。reactive()函数返回一个响应式引用对象,它包装了一个普通的对象,使得该对象能够成为响应式数据源。

下面是一个示例,演示了如何在UniApp中使用Vue3框架使用reactive()

<template>  
  <view>  
    <text>{{ message }}</text>  
    <button @click="changeMessage">点击改变文本</button>  
  </view>  
</template>  
<script setup>  
import { reactive } from 'vue';  
const state = reactive({  
  message: 'Hello, UniApp!'  
});  
const changeMessage = () => {  
  state.message = '你已经点击了按钮!';  
};  
</script>

在上面的示例中,我们使用reactive()函数创建了一个响应式对象state,并将message属性初始化为’Hello, UniApp!'。然后,我们定义了一个名为changeMessage的方法,用于改变message的值。由于state对象是响应式的,因此当message的值发生变化时,页面上的文本也会自动更新。

需要注意的是,使用reactive()函数创建的响应式对象与普通的对象不同。响应式对象可以监听属性的变化并自动更新相关的组件,而普通的对象不具备这种能力。因此,在使用响应式对象时,需要确保将它们传递给组件的属性或事件处理函数中,以便在数据更新时触发组件的重新渲染。

反应式代理与原始代理

在UniApp中使用Vue3框架时,你可以使用反应式代理与原始代理来处理一些复杂的数据操作。反应式代理可以帮助我们实现数据的双向绑定,而原始代理则可以让我们直接操作数据而无需担心响应性问题。

下面是一个示例,演示了如何在UniApp中使用Vue3框架使用反应式代理与原始代理:

<template>  
  <view>  
    <input v-model="proxyData" />  
    <button @click="updateProxyData">点击更新数据</button>  
    <text>{{ proxyData }}</text>  
  </view>  
</template>  
<script setup>  
import { reactive, toRefs, onMounted } from 'vue';  
const proxyData = reactive({ value: '' });  
const originalData = { value: '' };  
const proxyHandler = {  
  get(target, key) {  
    if (key === 'value') {  
      return target[key];  
    }  
  },  
  set(target, key, value) {  
    target[key] = value;  
    // 这里可以添加一些自定义的操作,例如触发更新或通知其他组件等  
  }  
};  
onMounted(() => {  
  Object.defineProperty(originalData, 'value', {  
    enumerable: true,  
    configurable: true,  
    get() {  
      return this._value;  
    },  
    set(newValue) {  
      this._value = newValue;  
      // 这里同样可以添加一些自定义的操作,例如触发更新或通知其他组件等  
    }  
  });  
  Object.setPrototypeOf(originalData, proxyHandler);  
});  
const updateProxyData = () => {  
  proxyData.value = '你已经更新了数据!'; // 修改代理数据,会触发响应式更新和自定义操作  
};  
</script>

在上面的示例中,我们首先使用reactive()函数创建了一个响应式对象proxyData,它包装了一个普通的对象,使得该对象能够成为响应式数据源。然后,我们创建了一个原始对象originalData,并定义了一个代理处理器proxyHandler。这个代理处理器通过Object.defineProperty()方法将value属性的getter和setter函数包装起来,以便在读取或修改value属性时执行一些自定义的操作。在onMounted()生命周期钩子函数中,我们使用Object.setPrototypeOf()方法将原始对象originalData的原型设置为代理处理器proxyHandler,从而实现了原始代理的效果。在修改originalData.value时,会触发自定义的操作。同时,由于proxyData是响应式的,因此当originalData.value的值发生变化时,页面上的文本也会自动更新。

数组和集合的注意事项

在UniApp中使用Vue3框架时,处理数组和集合需要注意以下几点:

  1. 数组和集合的初始化:在Vue3中,可以使用ref()函数来创建一个响应式引用对象,然后使用该引用来初始化数组或集合。例如:
import { ref } from 'vue';  
const array = ref([]); // 创建一个空数组的响应式引用  
const set = ref(new Set()); // 创建一个空的响应式集合
  1. 数组和集合的更新:对于数组和集合的更新,需要使用Vue3提供的push()pop()splice()shift()等方法,这样可以触发视图的更新。例如:
// 向数组中添加元素  
array.value.push('new element');  
// 从数组中移除元素  
array.value.splice(array.value.indexOf('element to remove'), 1);  
// 修改集合中的元素  
set.value.add('new element');  
set.value.delete('element to remove');
  1. 使用computed()函数:对于需要计算属性的情况,可以使用computed()函数来创建一个响应式计算属性。例如:
import { computed } from 'vue';  
const filteredArray = computed(() => {  
  return array.value.filter(item => item.includes('filter text'));  
});
  1. 使用watch()函数:对于需要在数组或集合发生变化时执行某些操作的情况,可以使用watch()函数来监听变化。例如:
watch(array, (newVal, oldVal) => {  
  // 在数组发生变化时执行某些操作  
});
  1. 使用nextTick()函数:在某些情况下,需要在DOM更新完成后执行某些操作,可以使用nextTick()函数来等待DOM更新完成。例如:
array.value.push('new element');  
nextTick(() => {  
  // 在DOM更新完成后执行某些操作  
});

在模板中展开时的注意事项

当在UniApp中使用Vue3框架展开模板时,有几个注意事项需要考虑。以下是一个示例,演示了在模板展开时需要注意的问题:

<template>  
  <view>  
    <template v-for="(item, index) in items" :key="index">  
      <text>{{ item.title }}</text>  
      <text v-if="item.description">{{ item.description }}</text>  
      <button @click="handleButtonClick(index)">点击</button>  
    </template>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const items = ref([  
  { title: 'Item 1', description: 'This is item 1' },  
  { title: 'Item 2' },  
  { title: 'Item 3', description: 'This is item 3' },  
]);  
const handleButtonClick = (index) => {  
  items.value[index].title = 'Updated Item';  
};  
</script>

在上面的示例中,我们使用了<template>元素来展开一个列表。以下是展开模板时需要注意的几个事项:

  1. 使用v-for指令循环遍历数组或对象时,必须为每个元素提供一个唯一的:key值。这有助于Vue3跟踪每个元素的变化,并只更新需要更新的元素,而不是整个列表。在示例中,我们使用索引作为键值。
  2. 当使用条件渲染(例如v-if)时,需要确保条件的变化不会导致模板中的元素位置发生变化。在示例中,我们根据item.description是否存在来决定是否显示描述文本。由于描述文本的存在与否不会影响其他元素的位置,所以这是可行的。
  3. 当在模板中使用事件处理函数(例如@click)时,确保传递正确的参数。在示例中,我们将索引作为参数传递给handleButtonClick函数,以便在点击按钮时更新相应项的标题。
  4. 注意避免在模板中直接修改数据。在示例中,我们通过调用handleButtonClick函数来更新数据,而不是直接在模板中修改item.title的值。这是因为直接在模板中修改数据可能会导致不可预测的行为和渲染问题。

以上是在UniApp中使用Vue3框架展开模板时需要注意的一些事项。遵循这些注意事项有助于确保你的模板正确展开并呈现所需的内容。

计算属性

在UniApp中使用Vue3框架时,你可以使用计算属性来处理一些依赖其他属性的计算逻辑。计算属性会根据依赖属性的变化自动重新计算,并且只会在相关依赖发生改变时触发重新渲染。

下面是一个示例,演示了如何在UniApp中使用Vue3框架使用计算属性:

<template>  
  <view>  
    <input v-model="firstName" placeholder="First Name" />  
    <input v-model="lastName" placeholder="Last Name" />  
    <text>Full Name: {{ fullName }}</text>  
  </view>  
</template>  
<script setup>  
import { ref, computed } from 'vue';  
const firstName = ref('');  
const lastName = ref('');  
const fullName = computed(() => {  
  return firstName.value + ' ' + lastName.value;  
});  
</script>

在上面的示例中,我们定义了两个响应式引用对象firstNamelastName,分别用于存储名字和姓氏。然后,我们使用computed()函数创建了一个计算属性fullNamefullName的计算逻辑是将firstNamelastName的值拼接起来,并在它们之间添加一个空格。由于fullName依赖于firstNamelastName,因此当这两个属性中的任何一个发生变化时,fullName的值都会自动重新计算。

在模板中,我们可以像使用普通属性一样使用计算属性fullName。当firstNamelastName的值发生变化时,模板中的文本会自动更新为最新的全名。

通过使用计算属性,我们可以将复杂的计算逻辑从模板中分离出来,并在数据变化时自动更新相关的属性值。这可以提高代码的可读性和可维护性,并使逻辑更加清晰和可测试。

计算缓存与方法

在UniApp中使用Vue3框架时,你可以使用计算属性和方法来处理一些依赖其他属性或数据的计算逻辑。计算属性会自动根据依赖属性的变化重新计算,而方法则可以用来封装一些可复用的函数逻辑。

下面是一个示例,演示了如何在UniApp中使用Vue3框架使用计算缓存与方法:

<template>  
  <view>  
    <input v-model="firstName" placeholder="First Name" />  
    <input v-model="lastName" placeholder="Last Name" />  
    <text>Full Name: {{ fullName }}</text>  
    <button @click="getFullName">Get Full Name</button>  
  </view>  
</template>  
<script setup>  
import { ref, computed } from 'vue';  
const firstName = ref('');  
const lastName = ref('');  
// 计算属性:fullName  
const fullName = computed(() => {  
  return firstName.value + ' ' + lastName.value;  
});  
// 方法:getFullName  
const getFullName = () => {  
  alert(fullName.value);  
};  
</script>

在上面的示例中,我们定义了两个响应式引用对象firstNamelastName,分别用于存储名字和姓氏。然后,我们使用computed()函数创建了一个计算属性fullNamefullName的计算逻辑是将firstNamelastName的值拼接起来,并在它们之间添加一个空格。由于fullName依赖于firstNamelastName,因此当这两个属性中的任何一个发生变化时,fullName的值都会自动重新计算。

此外,我们还定义了一个名为getFullName的方法,用于在点击按钮时获取全名并弹出一个提示框。在方法中,我们直接调用了计算属性fullName的值。

在模板中,我们可以像使用普通属性一样使用计算属性fullName。当firstNamelastName的值发生变化时,模板中的文本会自动更新为最新的全名。同时,我们还可以通过调用方法getFullName来获取全名并触发相应的操作。

通过使用计算属性和方法,我们可以将复杂的计算逻辑从模板中分离出来,并在需要时手动触发相应的操作。这可以提高代码的可读性和可维护性,并使逻辑更加清晰和可测试。

可写计算

在UniApp中使用Vue3框架时,你可以使用可写计算属性来封装复杂的计算逻辑,并将结果保存到一个响应式引用对象中,以便在其他地方使用。

下面是一个示例,演示了如何在UniApp中使用Vue3框架使用可写计算:

<template>  
  <view>  
    <input v-model="firstName" placeholder="First Name" />  
    <input v-model="lastName" placeholder="Last Name" />  
    <text>Full Name: {{ fullName }}</text>  
  </view>  
</template>  
<script setup>  
import { ref, computed } from 'vue';  
const firstName = ref('');  
const lastName = ref('');  
// 可写计算属性:fullName  
const fullName = computed(set => {  
  return {  
    get() {  
      return set(firstName.value + ' ' + lastName.value);  
    },  
    set(value) {  
      const names = value.split(' ');  
      firstName.value = names[0];  
      lastName.value = names[1];  
    }  
  };  
});  
</script>

在上面的示例中,我们定义了两个响应式引用对象firstNamelastName,分别用于存储名字和姓氏。然后,我们使用computed()函数创建了一个可写计算属性fullNamefullName的计算逻辑是将firstNamelastName的值拼接起来,并在它们之间添加一个空格。与普通计算属性不同,可写计算属性返回一个包含getset方法的对象。在set方法中,我们将全名拆分成名字和姓氏,并将它们分别存储到firstNamelastName中。

在模板中,我们可以像使用普通属性一样使用计算属性fullName。当firstNamelastName的值发生变化时,模板中的文本会自动更新为最新的全名。同时,我们还可以通过调用方法setFullName来设置全名并触发相应的操作。

通过使用可写计算属性,我们可以将复杂的计算逻辑从模板中分离出来,并在需要时手动触发相应的操作。这可以提高代码的可读性和可维护性,并使逻辑更加清晰和可测试。

绑定 HTML 类

在UniApp中使用Vue3框架时,你可以使用类绑定语法来动态地添加或移除HTML元素的类。

下面是一个示例,演示了如何在UniApp中使用Vue3框架使用绑定HTML类:

<template>  
  <view>  
    <button @click="toggleClass">Toggle Class</button>  
    <div :class="{ 'active': isActive }">Content</div>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const isActive = ref(false);  
const toggleClass = () => {  
  isActive.value = !isActive.value;  
};  
</script>  
<style scoped>  
.active {  
  color: red;  
}  
</style>

在上面的示例中,我们定义了一个名为isActive的响应式引用对象,用于存储一个布尔值状态。然后,我们在<div>元素上使用:class指令来绑定一个类对象。类对象中有一个名为active的类,当isActive为真时,该类将被添加到<div>元素上。我们还定义了一个名为toggleClass的方法,用于在点击按钮时切换isActive的状态。

在样式中,我们使用.active选择器来定义active类的样式。在这个例子中,我们将文本颜色设置为红色。

通过使用类绑定语法,我们可以根据Vue实例中的状态动态地添加或移除HTML元素的类,从而实现更加灵活的样式控制。

绑定到数组

在UniApp中使用Vue3框架时,你可以使用数组绑定语法来动态地绑定HTML元素的类,其中类名由数组中的元素决定。

下面是一个示例,演示了如何在UniApp中使用Vue3框架使用绑定到数组:

<template>  
  <view>  
    <button @click="toggleClass">Toggle Class</button>  
    <div :class="classList">Content</div>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const isActive = ref(false);  
const classList = computed(() => {  
  return isActive.value ? ['active', 'highlight'] : [];  
});  
const toggleClass = () => {  
  isActive.value = !isActive.value;  
};  
</script>  
<style scoped>  
.active {  
  color: red;  
}  
.highlight {  
  background-color: yellow;  
}  
</style>

在上面的示例中,我们定义了一个名为isActive的响应式引用对象,用于存储一个布尔值状态。然后,我们使用computed函数创建了一个计算属性classList,它根据isActive的值返回一个包含类名的数组。当isActive为真时,数组包含'active''highlight'两个类名,否则返回一个空数组。在<div>元素上,我们使用:class指令将classList绑定到类上。这将根据classList中的类名动态地添加或移除<div>元素的类。我们还定义了一个名为toggleClass的方法,用于在点击按钮时切换isActive的状态。在样式中,我们使用.active.highlight选择器来定义这两个类的样式。在这个例子中,我们将文本颜色设置为红色,并将背景颜色设置为黄色。通过使用数组绑定语法,我们可以根据Vue实例中的状态动态地添加或移除多个类名到HTML元素上。这样,我们可以更灵活地控制元素的样式,根据不同的状态应用不同的样式组合。

带组件

在UniApp中使用Vue3框架时,你可以使用组件来封装可复用的代码块,并在需要的地方进行渲染。下面是一个示例,演示了如何在UniApp中使用Vue3框架使用带组件:

<template>  
  <view>  
    <button @click="toggleActive">Toggle Active</button>  
    <my-component :is-active="isActive"></my-component>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
import MyComponent from './MyComponent.vue';  
const isActive = ref(false);  
const myComponent = MyComponent;  
const toggleActive = () => {  
  isActive.value = !isActive.value;  
};  
</script>

在上面的示例中,我们首先导入了一个名为MyComponent的组件,它可以根据isActive的值来决定是否显示一些内容。然后,在模板中,我们使用<my-component>标签将组件引入到页面中,并使用:is-active="isActive"来将isActive的值传递给组件。最后,我们定义了一个名为toggleActive的方法,用于在点击按钮时切换isActive的状态。这样,每次点击按钮时,组件的显示状态就会相应地变化。

下面是一个示例的组件文件MyComponent.vue

<template>  
  <view v-if="isActive">  
    <p>This is my component!</p>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const isActive = ref(false);  
</script>

在组件文件中,我们使用<template>标签定义了组件的模板部分,其中使用v-if="isActive"来根据isActive的值决定是否显示<p>元素。然后,我们导入并声明了isActive响应式引用对象。这样,组件就可以根据外部传递的isActive值来控制自己的显示状态。

绑定到对象

在UniApp中使用Vue3框架时,你可以使用对象绑定语法将属性绑定到对象上。下面是一个示例,演示了如何在UniApp中使用Vue3框架使用绑定到对象:

<template>  
  <view>  
    <button @click="toggleActive">Toggle Active</button>  
    <div :style="{ color: activeColor, fontWeight: activeWeight }">Content</div>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const activeColor = ref('black');  
const activeWeight = ref('bold');  
const toggleActive = () => {  
  activeColor.value = activeColor.value === 'black' ? 'red' : 'black';  
  activeWeight.value = activeWeight.value === 'bold' ? 'normal' : 'bold';  
};  
</script>

在上面的示例中,我们定义了两个响应式引用对象activeColoractiveWeight,分别用于存储文本颜色和字体粗细的值。然后,在模板中的<div>元素上,我们使用:style指令将样式绑定到一个对象上。该对象包含两个属性,即colorfontWeight,分别对应于activeColoractiveWeight的值。这样,每次点击按钮时,就会根据当前的颜色和粗细值更新文本的样式。

通过使用对象绑定语法,你可以将多个属性绑定到一个元素上,并根据Vue实例中的状态动态地更新元素的样式。

多重价值

在UniApp中使用Vue3框架时,你可以使用多重值绑定语法来实现多个绑定值的组合。下面是一个示例,演示了如何在UniApp中使用Vue3框架使用多重价值:

<template>  
  <view>  
    <input v-model="text" type="text" placeholder="Enter some text...">  
    <button @click="toggleActive">Toggle Active</button>  
    <p :class="[isActive ? 'active' : '', text.length > 0 ? 'has-text' : '']">  
      {{ text }}  
    </p>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const text = ref('');  
const isActive = ref(false);  
const toggleActive = () => {  
  isActive.value = !isActive.value;  
};  
</script>  
<style scoped>  
.active {  
  color: red;  
}  
.has-text {  
  font-weight: bold;  
}  
</style>

在上面的示例中,我们使用了<input>元素和v-model指令来双向绑定输入框的值到text响应式引用对象上。然后,我们使用了一个计算属性来动态生成<p>元素的类名。该计算属性是一个数组,其中包含两个条件表达式,分别判断isActivetext.length的值。如果isActive为真,则添加'active'类名;如果text.length大于0,则添加'has-text'类名。最后,我们使用插值语法将text的值显示在<p>元素中。这样,当用户在输入框中输入文本或点击按钮时,<p>元素的样式会根据条件动态更新。通过使用多重值绑定语法,你可以根据多个条件动态地更新元素的类名或其他属性。这可以帮助你实现更复杂的样式和行为逻辑,以满足不同的需求。请注意,上述示例中的代码是使用Vue3的Composition API编写的。如果你使用的是Options API,代码的结构会略有不同,但实现的功能是类似的。

条件渲染

在UniApp中使用Vue3框架时,你可以使用条件渲染来根据条件动态地显示或隐藏元素。下面是一个示例,演示了如何在UniApp中使用Vue3框架使用条件渲染:

<template>  
  <view>  
    <button @click="toggleActive">Toggle Active</button>  
    <p v-if="isActive">This is active</p>  
    <p v-else>This is not active</p>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const isActive = ref(false);  
const toggleActive = () => {  
  isActive.value = !isActive.value;  
};  
</script>

在上面的示例中,我们使用了v-ifv-else指令来实现条件渲染。v-if指令用于根据条件判断是否显示元素,而v-else指令用于在v-if的条件不满足时显示其他元素。在本例中,当isActive为真时,显示"This is active"文本;否则,显示"This is not active"文本。通过使用条件渲染,你可以根据Vue实例中的状态动态地显示或隐藏元素,从而实现更灵活的界面控制。

列表渲染

在UniApp中使用Vue3框架时,你可以使用列表渲染语法来动态地渲染一个列表。下面是一个示例,演示了如何在UniApp中使用Vue3框架使用列表渲染:

<template>  
  <view>  
    <button @click="addItem">Add Item</button>  
    <ul>  
      <li v-for="(item, index) in items" :key="index">{{ item }}</li>  
    </ul>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const items = ref([]);  
const addItem = () => {  
  items.value.push(`Item ${items.value.length + 1}`);  
};  
</script>

在上面的示例中,我们使用了v-for指令来渲染一个列表。v-for指令接受一个数组或对象作为参数,并使用一个模板来渲染每个元素。在本例中,我们将items数组作为参数传递给v-for指令,并在<li>元素中使用插值语法显示每个元素的值。通过点击按钮调用addItem方法,可以向items数组中添加新的元素,并自动更新列表的渲染结果。通过使用列表渲染,你可以动态地渲染一个可变数量的元素,从而实现更灵活的界面展示。

监听事件

在UniApp中使用Vue3框架时,你可以使用监听事件来响应用户的操作。下面是一个示例,演示了如何在UniApp中使用Vue3框架使用监听事件:

<template>  
  <view>  
    <button @click="handleClick">Click me</button>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const handleClick = () => {  
  console.log('Button clicked!');  
};  
</script>

在上面的示例中,我们使用了@click监听事件来监听按钮的点击操作。当用户点击按钮时,handleClick方法将被调用,并在控制台中输出"Button clicked!"。你可以在监听事件中使用任何你需要的逻辑,例如更新数据、调用API等。通过使用监听事件,你可以响应用户的操作,并根据需要执行相应的处理。

内联处理程序

在UniApp中使用Vue3框架时,你可以使用内联处理程序来直接在模板中编写JavaScript代码。下面是一个示例,演示了如何在UniApp中使用Vue3框架使用内联处理程序:

<template>  
  <view>  
    <button @click="handleClick">Click me</button>  
    <p>{{ message }}</p>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const message = ref('Hello, UniApp!');  
const handleClick = () => {  
  message.value = 'Button clicked!';  
};  
</script>

在上面的示例中,我们在模板中使用了内联处理程序来处理按钮点击事件和显示文本。在<button>元素上,我们使用了@click监听事件来监听按钮的点击操作,并在handleClick方法中更新message的值。在<p>元素中,我们使用了插值语法来显示message的值。通过使用内联处理程序,你可以直接在模板中编写JavaScript代码,从而更方便地处理用户交互和数据展示。

方法处理程序

在UniApp中使用Vue3框架时,你可以使用方法处理程序来定义在模板中调用的自定义函数。下面是一个示例,演示了如何在UniApp中使用Vue3框架使用方法处理程序:

<template>  
  <view>  
    <button @click="handleClick">Click me</button>  
    <p>{{ message }}</p>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const message = ref('Hello, UniApp!');  
const handleClick = () => {  
  message.value = 'Button clicked!';  
};  
// 方法处理程序示例  
const doubleMessage = (value) => {  
  return value * 2;  
};  
</script>

在上面的示例中,我们定义了一个名为doubleMessage的方法处理程序。这个方法接受一个参数value,并返回其两倍的值。你可以在模板中使用方法处理程序来调用这个函数,例如在<p>元素中,我们可以使用doubleMessage(message.value)来将message的值加倍并显示出来。通过使用方法处理程序,你可以在Vue组件中定义可重用的自定义函数,并在模板中方便地调用它们。

方法与在线检测

UniApp 使用 Vue3 框架时,您可以使用方法和在线检测来处理应用程序中的逻辑和数据。下面是一个示例,演示了如何在 UniApp 中使用 Vue3 框架使用方法和在线检测:

<template>  
  <view>  
    <button @click="handleClick">Click me</button>  
    <p>{{ message }}</p>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
// 定义响应式数据  
const message = ref('Hello, UniApp!');  
// 定义方法处理程序  
const handleClick = () => {  
  // 在线检测方法处理程序  
  const isValid = validateInput(message.value);  
  if (isValid) {  
    message.value = 'Button clicked!';  
  } else {  
    message.value = 'Invalid input!';  
  }  
};  
// 在线检测方法处理程序  
const validateInput = (input) => {  
  // 在这里添加验证逻辑,例如检查输入是否为空或是否符合特定格式等。  
  // 这里只是一个简单的示例,仅检查输入是否为空。  
  return input !== '';  
};  
</script>

在上面的示例中,我们定义了一个名为 handleClick 的方法处理程序,它会在按钮点击时被调用。在这个方法中,我们使用另一个名为 validateInput 的方法处理程序来验证 message 的值是否有效。如果 message 的值为空或不符合要求,validateInput 方法将返回 false,否则返回 true。然后,我们根据 validateInput 的返回值来更新 message 的值。通过使用方法和在线检测,您可以编写可重用的函数来处理应用程序中的逻辑和数据,并在需要时进行验证和更新。

调用内联处理程序中的方法

在UniApp中使用Vue3框架时,你可以在模板中直接调用组件内联处理程序中的方法。以下是一个示例:

<template>  
  <view>  
    <button @click="handleClick">Click me</button>  
    <p>{{ message }}</p>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const message = ref('Hello, UniApp!');  
const handleClick = () => {  
  message.value = 'Button clicked!';  
  callInlineMethod(); // 调用内联方法  
};  
// 定义内联方法  
const callInlineMethod = () => {  
  console.log('Inline method called!');  
};  
</script>

在上面的示例中,我们在handleClick方法中调用了callInlineMethod内联方法。当用户点击按钮时,handleClick方法将被触发,并更新message的值。然后,callInlineMethod方法将在控制台中输出一条消息。通过在模板中直接调用内联方法,你可以方便地在组件内部执行自定义逻辑。

访问内联处理程序中的事件参数

在UniApp中使用Vue3框架时,你可以在模板中直接访问内联处理程序中的事件参数。以下是一个示例:

<template>  
  <view>  
    <button @click="handleClick('Button clicked!')">Click me</button>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const handleClick = (message) => {  
  console.log(message); // 访问事件参数  
};  
</script>

在上面的示例中,我们在<button>元素上使用了@click监听事件,并将handleClick方法作为内联处理程序传递了一个字符串参数'Button clicked!'。在handleClick方法中,我们可以直接访问这个事件参数,并使用console.log将其输出到控制台。通过在模板中传递事件参数给内联处理程序,你可以方便地传递数据并在方法中使用它们。

事件修饰符

在UniApp中使用Vue3框架时,你可以使用事件修饰符来更方便地处理用户交互事件。以下是一个示例,演示了如何在UniApp中使用Vue3框架使用事件修饰符:

<template>  
  <view>  
    <button @click.prevent="handleClick">Click me</button>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const handleClick = () => {  
  console.log('Button clicked!');  
};  
</script>

在上面的示例中,我们在<button>元素上使用了@click监听事件,并在事件前添加了prevent修饰符。这个修饰符可以阻止事件的默认行为,例如页面跳转或表单提交等。在handleClick方法中,我们简单地输出了一条消息到控制台。通过使用事件修饰符,你可以更方便地处理用户交互事件,并避免不必要的默认行为。

按键修饰符

在UniApp中使用Vue3框架时,你可以使用按键修饰符来更精确地处理键盘事件。以下是一个示例,演示了如何在UniApp中使用Vue3框架使用按键修饰符:

<template>  
  <view>  
    <input @keyup.enter="handleKeyUp" />  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const handleKeyUp = (event) => {  
  console.log('Key up:', event.key);  
};  
</script>

在上面的示例中,我们在<input>元素上使用了@keyup监听事件,并在事件前添加了enter修饰符。这个修饰符表示只有当用户按下回车键时才会触发事件。在handleKeyUp方法中,我们简单地输出按下的键到控制台。通过使用按键修饰符,你可以更精确地处理键盘事件,并只对特定的按键做出响应。

关键别名
  • .enter
  • .tab
  • .delete(捕获“删除”和“退格”键)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right
系统修改键
  • .ctrl
  • .alt
  • .shift
  • .meta

鼠标按钮修改器

在UniApp中使用Vue3框架时,你可以使用按键修饰符来更精确地处理键盘事件。以下是一个示例,演示了如何在UniApp中使用Vue3框架使用.left.right.middle按键修饰符:

vue复制代码
<template>  
  <view>  
    <input @keydown="handleKeyDown" />  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const handleKeyDown = (event) => {  
  if (event.key === 'Left' && event.altKey) {  
    console.log('Left key with Alt key pressed');  
  } else if (event.key === 'Right' && event.altKey) {  
    console.log('Right key with Alt key pressed');  
  } else if (event.key === 'Middle' && event.altKey) {  
    console.log('Middle key with Alt key pressed');  
  }  
};  
</script>

在上面的示例中,我们在<input>元素上使用了@keydown监听事件,并在事件前没有添加任何修饰符。然后,在handleKeyDown方法中,我们检查按下的键是否为左键、右键或中键,并且是否同时按下了Alt键。如果是,则输出相应的消息到控制台。通过使用.left.right.middle按键修饰符,你可以更精确地处理键盘事件,并区分不同的按键情况。

表单输入绑定

在UniApp中使用Vue3框架时,你可以使用表单输入绑定来将用户输入与组件的数据进行绑定。以下是一个示例,演示了如何在UniApp中使用Vue3框架使用表单输入绑定:

<template>  
  <view>  
    <input v-model="message" type="text" placeholder="Enter your message">  
    <button @click="sendMessage">Send</button>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
const message = ref('');  
const sendMessage = () => {  
  console.log('Message:', message.value);  
};  
</script>

在上面的示例中,我们在<input>元素上使用了v-model指令来绑定message数据。v-model指令将输入值与message数据进行了双向绑定,这意味着当用户在输入框中输入文本时,message数据将被更新,反之亦然。在sendMessage方法中,我们简单地输出了用户输入的消息到控制台。通过使用表单输入绑定,你可以方便地将用户输入与组件的数据进行绑定,从而实现动态交互。

修饰符
.lazy

默认情况下,v-model在每个事件后将输入与数据同步(如上所述input的 IME 组合除外)。您可以添加修饰符以在事件发生后同步:lazy``change

<!-- synced after "change" instead of "input" -->
<input v-model.lazy="msg" />
.number

如果您希望用户输入自动转换为数字,您可以将修饰符添加numberv-model托管输入中:

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

如果无法使用 解析该值parseFloat(),则使用原始值。

number如果输入有 ,则自动应用修饰符type="number"

.trim

如果您希望自动修剪用户输入中的空格,您可以将修饰符添加trim到您的v-model托管输入中:

<input v-model.trim="msg" />

注册生命周期钩子

在UniApp中使用Vue3框架时,你可以注册生命周期钩子来执行特定的逻辑。以下是一个示例,演示了如何在UniApp中使用Vue3框架注册生命周期钩子:

<template>  
  <view>  
    <p>{{ message }}</p>  
  </view>  
</template>  
<script setup>  
import { ref, onMounted, onUnmounted } from 'vue';  
const message = ref('');  
onMounted(() => {  
  console.log('Component mounted');  
  // 在这里执行组件挂载后的逻辑  
});  
onUnmounted(() => {  
  console.log('Component unmounted');  
  // 在这里执行组件卸载前的逻辑  
});  
</script>

在上面的示例中,我们使用了onMountedonUnmounted生命周期钩子。onMounted钩子在组件挂载后执行,而onUnmounted钩子在组件卸载前执行。在onMounted钩子中,我们可以在控制台输出一条消息,表示组件已经挂载。在onUnmounted钩子中,我们也可以在控制台输出一条消息,表示组件即将卸载。通过注册生命周期钩子,你可以在组件的生命周期的不同阶段执行特定的逻辑。

watch函数

在UniApp中使用Vue3框架时,你可以使用watch函数来观察和响应Vue实例上的数据变化。以下是一个示例,演示了如何在UniApp中使用Vue3框架使用watch函数:

vue复制代码
<template>  
  <view>  
    <input v-model="message" type="text" placeholder="Enter your message">  
    <p>{{ message }}</p>  
  </view>  
</template>  
<script setup>  
import { ref, watch } from 'vue';  
const message = ref('');  
const otherMessage = ref('');  
watch(  
  () => message.value,  
  (newValue, oldValue) => {  
    console.log(`Message changed from ${oldValue} to ${newValue}`);  
    otherMessage.value = newValue; // 将新的消息值更新到另一个变量中  
  },  
  { immediate: true } // 选项:立即执行回调函数,而不是等待第一次数据变化  
);  
</script>

在上面的示例中,我们使用了watch函数来观察message数据的变化。当message的值发生变化时,回调函数将被执行,输出旧值和新值到控制台,并将新的消息值更新到另一个变量otherMessage中。通过使用watch函数,你可以在数据变化时执行自定义逻辑,并对数据进行响应。

组件之间传值

在UniApp中使用Vue3框架时,有多种方式可以在组件之间进行传值。以下是几种常见的示例:

  1. 使用props和事件(父组件向子组件传值):

父组件:

<template>  
  <view>  
    <child-component :message="parentMessage" @child-event="handleChildEvent"></child-component>  
  </view>  
</template>  
<script setup>  
import { ref } from 'vue';  
import ChildComponent from './ChildComponent.vue';  
const parentMessage = ref('Hello from parent component!');  
const childComponent = ref(null);  
onMounted(() => {  
  childComponent.value = new ChildComponent({ props: { message: parentMessage.value } });  
});  
methods: {  
  handleChildEvent(event) {  
    console.log(event);  
  }  
}  
</script>

子组件(ChildComponent.vue):

<template>  
  <view @click="sendEvent">  
    <p>{{ message }}</p>  
  </view>  
</template>  
<script setup>  
import { ref, emit } from 'vue';  
const message = ref('');  
const sendEvent = () => { emit('child-event') }  
</script>

在上面的示例中,父组件通过v-bind指令将parentMessage的值传递给子组件,并在子组件上注册了一个名为child-event的事件监听器。子组件接收到父组件传递的值并在模板中进行显示,同时当点击时触发名为child-event的事件,将事件对象作为参数传递给父组件的handleChildEvent方法。

\2. 使用Vuex(全局状态管理):

在UniApp中,可以使用Vuex来进行全局状态管理,将数据存储在一个集中式的存储中,并在多个组件之间共享。以下是一个简单的示例:

首先,在项目根目录下创建一个名为store.js的文件,用于定义Vuex的store:

store.js:

import { createStore } from 'vuex';  
import ChildComponent from './ChildComponent.vue';  
import ParentComponent from './ParentComponent.vue';  
const store = createStore({  
  state: {  
    message: ''  
  },  
  mutations: {  
    setMessage(state, value) { state.message = value }  
  },  
  modules: { }  
});  
export default store;
相关文章
|
19天前
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
16天前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
38 7
|
18天前
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
39 3
|
16天前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
36 1
|
16天前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
38 1
|
19天前
|
前端开发 JavaScript
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
|
19天前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
JavaScript
vue 踩坑 01 ->两种创建vue实例的区别
第一个例子 {{msg}} var app = new Vue({ el: '#app', data: { m...
967 0
|
7天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
7天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。