写Vue页面思路
写Vue页面思路
-
先写网络请求
复制
/** * 查询素材问题列表(分页) */ export const requestConceptsConflictSelectLimit = (params = {}, data = {}) => { return request({ url: SERVICE_KEY + "/baseConceptsConflict/limitlist", params, method: "post", data }); };
2.主页面布局,导入网络请求
<template> <HeaderComp :item="item" title="素材问题列表" class="comp"> 素材问题列表 </HeaderComp> </template> <script> import HeaderComp from "@/components/webProtege/components/Header"; import CompMixin from "@/mixins/CompMixin.js"; export default { components: { HeaderComp }, mixins: [CompMixin], inject: ["config"], data() { return {}; } }; </script>
3.export default结构说明
<script> import Confirm from '../sub/Confirm'; export default { name : "First", // components 组件注册 components: { Confirm }, // 注册属性 props: { name: { type: String, default: "父组件" }, }, created() { // created 在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图 }, mounted() { // mounted在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作 }, // data() 为变量赋值等 data() { return { msg: "Welcom to FirstApp" }; }, // methods 编写js函数 methods: { getMessage(val) { alert(val); } } } </script>
4.子组件
//使用 <ProgramList :item="item" :data="conceptsConflictData" type="comp" @reload="handleReload" @languageChange="handleLanguageChange" /> <script> //导入 import ProgramList from "@/view/keyword/components/materialThesaurus/MaterialProblem/ProgramList.vue"; </script>
5.值的绑定
//父组件页面 <script> export default { components: {}, data:{ //与子组件数据绑定 conceptsConflictData: {}, }, mounted() { //页面加载后执行 this.handleReload(); }, methods: { //加载被调用 handleReload() { this.requestConceptsConflictSelectLimit(); }, //发送网络请求,传递参数 async requestConceptsConflictSelectLimit(item) { const res = await requestConceptsConflictSelectLimit({ ...item, vocid: this.pageinfo.vocid, language: this.pageinfo.language, page: this.pageinfo.page, limit: this.pageinfo.limit }); //值绑定 this.conceptsConflictData = res.data; this.total = Number(res.data.page.total); this.page = Number(res.data.page.page); this.pages = Number(res.data.page.pages); }, } } </script> //子组件页面 //查询请求后参数接收 <script> export default { watch: { props: {}, data: { immediate: true, //核心 handler(data) { this.list = data.list; this.language = data.language; if (typeof data.page !== "undefined") { this.total = data.page.total; } } } }, } </script>
- 子组件给父组件传值
//子组件代码 methods: { // 语言选择下拉框触发事件 handleCommand() { this.$emit("languageChange", this.language); }, }
//父组件 <ProgramList :item="item" :data="conceptsConflictData" type="comp" @reload="handleReload" @languageChange="handleLanguageChange" //核心 /> <script> export default { methods: { // 接受子组件的传值 handleLanguageChange(data) { this.pageinfo.language = data; this.pageinfo.page = 1; this.requestConceptsConflictSelectLimit(); }, } } </script>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)