Vue3-script-setup

教程使用的版本

vue: 3.2.31
typescript: 4.1.6

前言

Options API 约定:
我们需要在 props 里面设置接收参数
我们需要在 data 里面设置变量
我们需要在 computed 里面设置计算属性
我们需要在 watch 里面设置监听属性
我们需要在 methods 里面设置事件方法
你会发现 Options APi 都约定了我们该在哪个位置做什么事,这反倒在一定程度上也强制我们进行了代码分割。现在用 Composition API,不再这么约定了,于是乎,代码组织非常灵活,我们的控制代码写在 setup 里面即可。
setup函数提供了两个参数 props和context,重要的是在setup函数里没有了this,在 vue3.0 中,访问他们变成以下形式: this.xxx=》context.xxx
我们没有了 this 上下文,没有了 Options API 的强制代码分离。Composition API 给了我们更加广阔的天地,那么我们更加需要慎重自约起来。

之前

我们之前的组件可能是这样的:

<template>
  <div class="flex items-center justify-center h-screen bg-gray-50">
    <Card>{{msg}}</Card>
  </div>
</template>
<script lang="ts">
import { ref, defineComponent } from "vue";
import Card from "./components/Card.vue";

export default defineComponent({
  components: {
    Card,
  },
  setup() {
    const msg = ref("setup script");
    return { msg };
  }
});
</script>

这里做了三件事:
第一件事lang="ts"支持typescript
第二个是导入并注册组件
第三个是导出一个字符串给template使用。

现在

启用<script lang="ts" setup>之后是这样的:

<template>
  <div class="flex items-center justify-center h-screen bg-gray-50">
    <Card>{{msg}}</Card>
  </div>
</template>


<script  lang="ts" setup>
import { ref } from "vue";
import Card from "./components/Card.vue";
const msg = ref("setup script");
</script>

<script lang="ts" setup>里面定义的所有变量都会自动导出非常方便,而且所有的组件导入即可自动注册从而直接就可以使用了

注意事项:所有变量尽量都要转换为对象形式变量,不然无法动态改变

常用的方法

<script lang="ts" setup>
import { ref,reactive,defineProps,defineEmits,defineExpose ,useSlots,useAttrs,getCurrentInstance } from "vue";
</script>
  1. ref,toRef,toRefs,reactive,将变量转换为引用类型
  2. defineProps 获取父组件传值
  3. defineEmits 调用父组件事件
  4. defineExpose 来暴露组件内部属性给父组件使用
  5. useSlots 获取插槽数据
  6. useAttrs用来获取 attrs 数据的(也就是非 props 的属性值)如果当前组件里没有将某个属性指定为 props,那么父组件绑定下来的属性值,都会进入到 attrs 里,通过这个新 API 来拿到。
  7. getCurrentInstance 类似this,里面有当前组件的全部信息

常用的钩子和事件

除去 beforeCreate 和 created 之外() setup 方法中,有9个旧的生命周期钩子, 而这两个钩子被setup初始化代替了

<script lang="ts" setup>
import {onMounted,onBeforeUpdate,onUpdated,onBeforeMount,onBeforeUnmount,onUnmounted,computed,watch } from "vue";
</script>
  • onMounted : 初始化完成事件之后
  • onBeforeUpdate : 数据修改前
  • onUpdated : 数据修改后
  • onBeforeMount: 初始化完成事件之前
  • onBeforeUnmount: 组件销毁前
  • onUnmounted: 组件销毁后
  • computed: 监听数据的计算
  • watch : 监听数据的变化
  • nextTick : 用于下次Dom更新循环结束之后执行延迟回调,在修改数据之后使用nextTick,则可以在回调中获取更新后的DOM

演示

指令OR组件的导入

指令和组件一样,导入自动注册直接就能使用:

组件

<script  lang="ts" setup>
  import {helloWorld} from './HelloWorld.vue'
</script>

<template>
  <helloWorld></helloWorld>
</template>

指令

<script  lang="ts" setup>
  import {color} from './v-color'
</script>

<template>
  <div v-color />
</template>

使用props

使用props需要用到defineProps来定义,具体用法跟之前的props写法类似:

<script lang="ts"  setup>
import { defineProps } from "vue";
//定义父组件传递进来的参数
const props = defineProps(['title', 'content']);
</script>

给props定义类型:

<script lang="ts"  setup>
	const props = defineProps({
	  title: String,
	  content: {
	      type: Stirng,
	      required: true
	  }
	});
</script>

使用emits

使用defineEmits对组件里面使用到的事件进行验证和定义:

<script lang="ts"  setup>
	import { defineEmits} from 'vue'
	
	//声明父组件方法
	//const emit = defineEmits(['onHeaderClick'])
	// 调用父组件的方法,和给方法传参
	//emit('onHeaderClick', 'params')
	
	//绑定多个事件
	//const emit = defineEmits(['update', 'delete'])
	
	// 绑定父组件的事件,对事件进行验证
	//const emit = defineEmit({
	//    onHeaderClick: ({title}) => {
	//        if(!title) {
	//            console.warn('Invalid title')
	//            return false
	//        }
	//        return true
	//    }
	//})
	// 调用父组件的方法,和给方法传参
	//emit('onHeaderClick', 'params')
</script>

使用$refs

你应该学过jquery吧,没用vue之前,我前端框架是用JS+Jquery+Bootstrap,因为不是数据驱动,为了获取某些元素的value,我常常会使用Jquery

$("#id").text('xxx')   // 使用Jquery
document.getElementById("id")  // 使用原生Dom

现在我们牛逼了,我们用vue。那vue中,如果我要获取Dom,该怎么做?
这就进入本文的主题ref, $refs,官网解释:

在这里插入图片描述
在setup中是没有this的所有下面的操作会有些变化

ref作用于子组件
获取子组件的方法属性…

<template>
  <ScriptSetup ref="scriptSetupRef"></ScriptSetup>
</template>

<script lang="ts" setup>
import  ScriptSetup from "./ScriptSetup"
import {getCurrentInstance,onMounted} from "vue";
const {proxy} = getCurrentInstance()
//ref初始化时候是没有的所以必须等到初始化之后才能使用, 两种办法,1.创建函数绑定到指定的事件中,2.等待初始化之后

onMounted(()=>{
  //使用方法
  proxy.$refs.scriptSetupRef.hello()
  //拿属性
  console.log(proxy.$refs.scriptSetupRef.options)
  //拿其他.只要子组件暴露出来的都能拿到
})

</script>

<style scoped>

</style>

注意: 子组件需要暴露自己的属性和方法

defineExpose({
  hello,options
})

ref: 就好比是之前jquery使用的id选择器一样,能拿到元素的dom对象,而在vue中

同步方法和异步组件问题

使用钩子

<script lang="ts" setup>
import {onBeforeMount} from "vue";
onBeforeMount(async () => {
const body = await  Get(`/api/test/await`).then((r) => r.data)
  console.log(body)
});
</script>

使用函数

<script lang="ts" setup>
import { ref } from "vue";
let testData = ref({});
//声明同步函数 ,不要直接初始化调用,要绑定到指定的事件上比如click
const getClickTest = async () => {
  const body = await Get(`/api/test/await`).then((r) => r.data)
   testData.value = body ;
}
</script>

使用suspense
在 script-setup 模式下,如果内部初始化时候有使用await 了(没执行的不算,比如被函数包裹住了,而这个函数只是定义了但没有运行),这种情况下,组件的 setup内部解析时候会自动变成 async setup (异步组件)

async setup() {
    const post = await withAsyncContext(
      fetch(`/api/post/1`).then((r) => r.json())
    )

}

然后使用这个组件就会出现问题,页面空白或者部分数据显示不出来,可以使用suspense将异步组件包裹起来,直到默认内容准备就绪。然后,它将自动切换以显示我们的异步组件

//直接包裹ScriptSetup组件
  <suspense>
    <ScriptSetup></ScriptSetup>
  </suspense>
  
// 包裹router-view视图,只要是这个视图下面的所有异步组件加载都会等待加载完毕后在显示
  <router-link to="/scriptSetup">ScriptSetup</router-link>
   <suspense>
       <router-view></router-view>
   </suspense>
点赞 -收藏-关注-便于以后复习和收到最新内容
有其他问题在评论区讨论-或者私信我-收到会在第一时间回复
如有侵权,请私信联系我
感谢,配合,希望我的努力对你有帮助^_^

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在Vue 3中,可以使用vue-quill-editor来实现在页面上使用富文本编辑器。下面是设置vue-quill-editor的步骤: 1. 首先,安装vue-quill-editor。可以使用npm或yarn来进行安装: ``` npm install vue-quill-editor ``` 或者 ``` yarn add vue-quill-editor ``` 2. 在需要使用富文本编辑器的组件中,导入并注册vue-quill-editor: ```javascript import { createApp } from 'vue' import VueQuillEditor from 'vue-quill-editor' const app = createApp(...) app.use(VueQuillEditor) ``` 3. 在模板中使用vue-quill-editor: ```html <template> <div> <vue-quill-editor v-model="content" :options="editorOptions"></vue-quill-editor> </div> </template> ``` 4. 在data中定义content以及editorOptions: ```javascript data() { return { content: '', editorOptions: { // 在这里可以设置富文本编辑器的配置项 } } } ``` 5. 可以根据需要在editorOptions中进行配置富文本编辑器的选项,例如设置工具栏按钮、字体、颜色等。具体的选项可以参考vue-quill-editor的文档。 通过以上步骤,就可以在Vue 3中使用vue-quill-editor来实现富文本编辑功能了。注意确保安装了相关依赖,并按照文档正确配置、使用vue-quill-editor组件。 ### 回答2: 在Vue 3中使用vue-quill-editor,需要进行以下步骤: 1. 首先,需要通过安装依赖来引入vue-quill-editor。可以使用npm或yarn来安装vue-quill-editor。在终端中执行以下命令: ```bash npm install vue-quill-editor ``` 或 ```bash yarn add vue-quill-editor ``` 2. 在需要使用vue-quill-editor的组件中,导入vue-quill-editor。可以通过以下方式导入: ```javascript import { quillEditor } from 'vue-quill-editor' ``` 3. 在组件内部,注册vue-quill-editor组件。 ```javascript export default { components: { quillEditor }, // ... } ``` 4. 在模板中使用vue-quill-editor。可以通过以下方式使用: ```html <template> <quillEditor v-model="content" /> </template> ``` content是一个响应式的数据,表示编辑器中的内容。 5. 可以通过props来自定义vue-quill-editor的配置选项。例如,可以通过以下方式设置编辑器的高度和工具栏的选项: ```html <template> <quillEditor v-model="content" :options="editorOptions" /> </template> ``` ```javascript export default { data() { return { content: '', editorOptions: { modules: { toolbar: [ ['bold', 'italic', 'underline', 'strike'], ['blockquote', 'code-block'], [{'header': 1}, {'header': 2}], [{'list': 'ordered'}, {'list': 'bullet'}], [{'script': 'sub'}, {'script': 'super'}], [{'indent': '-1'}, {'indent': '+1'}], [{'direction': 'rtl'}], [{'size': ['small', false, 'large', 'huge']}], [{'header': [1, 2, 3, 4, 5, 6, false]}], [{'font': []}], [{'color': []}, {'background': []}], [{'align': []}], ['clean'] ] }, placeholder: '请输入内容', theme: 'snow' } } }, // ... } ``` 这里仅提供了一种配置选项的示例,具体可以根据实际需求进行配置。 以上就是如何在Vue 3中使用vue-quill-editor的基本步骤。 ### 回答3: 为了在Vue 3中使用vue-quill-editor,您可以按照以下步骤进行设置: 首先,您需要确保已经安装了Vue 3和vue-quill-editor。您可以使用npm或yarn来安装它们: ``` npm install vue@next vue-quill-editor ``` 或者 ``` yarn add vue@next vue-quill-editor ``` 接下来,在您的Vue组件中,您需要引入vuevue-quill-editor并定义一个新的组件。您可以像这样导入它们: ```javascript import { createApp } from 'vue'; import VueQuillEditor from 'vue-quill-editor'; import 'quill/dist/quill.core.css'; import 'quill/dist/quill.snow.css'; import 'quill/dist/quill.bubble.css'; ``` 然后,创建一个新的Vue应用程序实例并将VueQuillEditor组件注册为全局组件: ```javascript const app = createApp(App); // 替换App为您的实际组件名称 app.component('vue-quill-editor', VueQuillEditor); app.mount('#app'); // 将#app替换为您的HTML模板中提供的根元素 ``` 现在,您的Vue 3应用程序已经设置了vue-quill-editor。 接下来,您可以在Vue模板中使用vue-quill-editor组件。例如,您可以将它放置在一个表单中并使用v-model来双向绑定输入值。像这样: ```html <template> <div> <vue-quill-editor v-model="content" /> </div> </template> <script> export default { data() { return { content: '', // 用于双向绑定的变量 }; }, }; </script> ``` 现在您可以通过访问`this.content`来获取用户在quill编辑器中输入的内容。 这就是在Vue 3中设置vue-quill-editor的步骤。记得在您的Vue组件中引入和注册vue-quill-editor,并在模板中使用它即可。祝您使用愉快!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡安民

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值