Vue框架应用实战项目式教程 课件 任务8 文章数据全局管理;任务9 项目托管与发布_第1页
Vue框架应用实战项目式教程 课件 任务8 文章数据全局管理;任务9 项目托管与发布_第2页
Vue框架应用实战项目式教程 课件 任务8 文章数据全局管理;任务9 项目托管与发布_第3页
Vue框架应用实战项目式教程 课件 任务8 文章数据全局管理;任务9 项目托管与发布_第4页
Vue框架应用实战项目式教程 课件 任务8 文章数据全局管理;任务9 项目托管与发布_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1文章数据全局管理任务8框架技术应用学习目标在Vue如何中实现全局状态管理呢?这就需要使用到pinia状态管理库了。pinia允许我们跨组件或页面共享状态,便于在Vue实例实现数据的全局共享和管理。本章节我们将学习pinia的下载安装和具体使用。【知识目标】掌握pinia的安装和配置;掌握pinia的使用方法。【技能目标】能够使用pinia进行全局状态管理。【素质目标】提升网络安全意识。项目背景在之前的章节中我们已经学习父子组件之间通信的方式,在项目中如何在多级嵌套的组件或同一层级的组件中共享数据,是我们常遇到的问题。本章节将重点介绍使用pinia全局状态管理库解决这一问题,并进行就业指导文章详情页开发。任务规划本任务要求使用pinia库进行就业指导文章详情页开发。任务8.1pinia的安装与配置本任务要求下载并配置pinia状态管理库。【任务分析】完成该任务需要同学们了解并且掌握以下知识内容pinia的下载与引入;pinia的配置和使用。任务流程如图8-1所示。图8-1任务流程图任务8.1pinia的安装与配置【任务实施】步骤一.下载并导入pinia。进入项目根目录,使用npm包管理工具下载pinia。npminstallpinia--save完成pinia的安装后,我们需要将pinia挂载到Vue实例中,也就是我们需要创建一个根存储传递给应用程序,简单来说就是创建一个存储数据的数据桶,放到应用程序中去。在main.js中导入pinia,并完成pinia导入和注册。import{createApp}from'vue'//导入createPinia方法import{createPinia}from'pinia'importAppfrom'./App.vue'//创建pinia实例constpinia=createPinia()constapp=createApp(App)//全局注册piniaapp.use(pinia)app.mount('#app')任务8.1pinia的安装与配置【任务实施】步骤二.配置pinia。在项目src目录下新建store文件夹,并在该文件夹中新建index.js、state.js、actions.js文件,用于存储pinia中各模块内容。文件结构如图8-2所示。图8-2文件结构任务8.1pinia的安装与配置【任务实施】步骤二.配置pinia。在此我们需要了解几个关于pinia的概念。Store:Store是用defineStore()函数定义的,Store是独立存在的,它用于保存状态和业务逻辑,而不绑定到组件树中。一个Store可以理解为一个独立的全局数据仓库,它包含三个模块,分别是state、getters和actions,它们相当于组件中的data、computed和methods。index.js是Store的入口文件,主要用于定义和配置Store。state:state是Store的核心部分。它主要用于存储全局数据。在以上代码中state.js就是用于创建state模块的。action:actions相当于组件中的methods。它们可以使用defineStore()中的actions属性定义,action用于定义业务逻辑。在以上代码中action.js就是用于创建action模块的。任务8.1pinia的安装与配置【任务实施】在index.js中定义和配置Store,代码如下所示:

import{defineStore}from'pinia'

importstatefrom'./state.js'

importactionsfrom'./actions'

conststore=defineStore('articles',{

state,

actions

})

exportdefaultstoredefineStore()用于定义一个Store,该函数接收两个参数:name:一个字符串,必传项,该Store的唯一id。options:一个对象,store的配置项,比如配置store内的数据,修改数据的方法等等。在defineStore('articles',{state,actions})代码中,我们为Store赋予了唯一id。同时将state模块和actions模块挂载至Store上。任务8.1pinia的安装与配置【任务实施】步骤二.配置pinia。在state.js中定义全局数据,并导出。为了便于同学们调试,我们暂时定义全局数据num=0。

exportdefault()=>{

return{

num:0,

}

}在App.vue中输入如下代码。尝试将定义好的store进行打印。

<scriptsetup>

//导入useShopStore方法

importuseShopStorefrom'./store/index.js'

conststore=useShopStore();

//打印store的唯一id

console.log(store.$id);

//打印state中的num数据

console.log(store.$state.num);

</script>任务8.1pinia的安装与配置【任务实施】代码运行结果如图8-3所示。图8-3输出结果任务8.1pinia的安装与配置【知识链接】8.1.1pinia简介pinia是一个拥有组合式API的Vue状态管理库,它允许你跨组件或页面共享状态。pinia的标志是一个菠萝,如图8-4所示,官方对其的解释是:“菠萝实际上是一组单独的花朵,它们结合在一起形成多个水果。与Store类似,每一个都是独立诞生的,但最终都是相互联系的。”图8-4pinia标志任务8.1pinia的安装与配置【知识链接】8.1.1pinia简介pinia的优势:pinia同时支持Vue2和Vue3;pinia中只有state、getter、action,抛弃了传统的Mutation,这无疑减少了工作量;pinia中action支持同步和异步;良好的Typescript支持,;pinia在组合式API中不再需要使用map函数进行映射;体积非常小,只有1KB左右;pinia支持插件来扩展自身功能;支持服务端渲染;任务8.1pinia的安装与配置【知识链接】8.1.2pinia核心概念1.store介绍一个store就是一个pinia实体,它持有未绑定到您的组件树的状态和业务逻辑。换句话说,它托管全局状态。store中可以挂载state、getters、actions、plugins等模块,如图8-5所示。state、getters和actions相当于组件中的data、computed和methods。分别用于管理全局数据、全局数据计算值以及业务逻辑。图8-5store核心模块任务8.1pinia的安装与配置【知识链接】8.1.2pinia核心概念2.定义store在深入了解核心概念之前,我们需要知道Store是使用defineStore(name,opt)定义的,并且它需要一个唯一名称,作为第一个参数传递:

import{defineStore}from'pinia'

//useStore可以是useUser、useCart之类的内容

//第一个参数是应用程序中store的唯一id

exportconstuseStore=defineStore('main',{

//其它配置...

})defineStore(name,opt)函数中的name参数也称为id,是必要的,具有唯一性。opt是一个对象,其中包括挂载到store上的state、actions、getters、plugins等,这些挂载对象都是可选项任务8.1pinia的安装与配置【知识链接】8.1.2pinia核心概念3.使用store定义好一个store之后我们可以在setup()中调用useStore()函数创建store。例如:

<scriptsetup>

//导入useShopStore方法

importuseShopStorefrom'./store/index.js'

conststore=useShopStore();

//打印store

console.log(store);

</script>可以根据需要定义任意数量的store,如果需要定义多个store,应该在不同的文件中创建不同的store,以便于管理和维护,同时需要注意每个store必须有唯一的id。一旦store被实例化,你就可以直接在store上访问state、getters和actions中定义的任何属性了。任务8.2文章数据全局管理【任务陈述】本任务要求使用pinia库对“就业指导”页中的作者和文章概览数据进行保存,如图8-6所示。并在对应的文章详情页中进行作者和文章概览内容的渲染,如图8-7所示。图8-6全局保存“就业指导”页数据任务8.2文章数据全局管理【任务陈述】本任务要求使用pinia库对“就业指导”页中的作者和文章概览数据进行保存,如图8-6所示。并在对应的文章详情页中进行作者和文章概览内容的渲染,如图8-7所示。图8-7文章详情页重新渲染全局数据任务8.2文章数据全局管理【任务分析】完成本任务需要同学们掌握以下知识点:store的定义和使用;state全局数据保存与读取;action全局业务逻辑的定义与使用。任务流程如图8-8所示。图8-8任务流程图任务8.2文章数据全局管理【任务实施】步骤一.定义全局数据和方法。进入项目store文件夹,在state.js中定义需要使用的全局数据。exportdefault()=>{

return{

//文章作者

author:0,

//文章概览

introduce:0

}

}在actions.js中定义全局方法,本案例中需要全局保存“就业指导”页的作者和文章概览数据,所以我们在actions.js中定义store方法,用于存储这些数据。

exportdefault{

store(data){

this.author=data.author

roduce=roduce

}

}在actions.js中定义全局方法,本案例中需要全局保存“就业指导”页的作者和文章概览数据,所以我们在actions.js中定义store方法,用于存储这些数据。其中“this”指代pinia中的数据对象,data用于接收输入该方法的具体数据内容。任务8.2文章数据全局管理【任务实施】步骤二.全局数据保存与展示。在“List.vue”组件(就业指导页)中保存选中文章的作者和文章概览数据。

<scriptsetup>

import{defineProps,toRefs}from'vue'

import{useRouter}from'vue-router'

//导入store

importuseStorefrom'../store/index.js'

conststore=useStore()

constrouter=useRouter()

constprops=defineProps({

articleList:Array

})

const{articleList}=toRefs(props)

functiongoArticle(item){

//保存数据

store.store(item)

router.push("/article/"+item.id)

}

</script>任务8.2文章数据全局管理【任务实施】步骤二.全局数据保存与展示。在SingleArticle.vue组件(文章详情页)中渲染保存的全局数据。<template><!--......

-->

<divclass="bg-lightp-2pt-4mt-4mb-4rounded"v-if="introduce">

<pclass="d-flexjustify-content-between">

<small>{{introduce}}</small>

<smallstyle="min-width:150px;text-align:right;">

{{author}}

</small>

</p>

</div><!--......

--></template><scriptsetup>

import{reactive,getCurrentInstance}from'vue'

import{useRouter}from'vue-router'

//导入pinia

importuseStorefrom'../store/index.js'

import{storeToRefs}from'pinia'

conststore=useStore()

//解构数据

const{author,introduce}=storeToRefs(store)</script>运行代码,点击“就业指导”页中任意文章列表,便可看到如图8-5、图8-6所示效果。任务8.2文章数据全局管理【知识链接】8.2.1state的定义和使用state是store的核心部分,用来存放公共数据。接下来我们通过【例8-1】说明如何定义和使用state中的数据。【例8-1】使用state中的数据进行页面渲染。具体步骤如下。(1)创建工程项目,下载pinia库,并在main.js中进行导入与挂载。import{createApp}from'vue'//导入createPinia方法import{createPinia}from'pinia'importAppfrom'./App.vue'//创建pinia实例constpinia=createPinia()constapp=createApp(App)//全局注册piniaapp.use(pinia)app.mount('#app')任务8.2文章数据全局管理(2)在工程项目的src目录中新建store目录,在该目录中新建state.js文件。我们定义两个全局数据num和price,分别用于表示商品数量与商品单价。

exportdefault()=>{

return{

//商品价格

price:10,

//商品数量

num:0

}

}(3)在store目录中新建index.js文件,用于创建store和挂载state。

import{defineStore}from'pinia'

importstatefrom'./state.js'

conststore=defineStore('shop',{

state,

})

exportdefaultstore任务8.2文章数据全局管理(4)接下来我们在App.vue的页面中显示state中的数据。

<template>

<div>

<button>-</button>

<spanclass="num">商品数量:{{num}}</span>

<button>+</button>

</div>

<div>

<button>-</button>

<spanclass="num">商品价格:{{price}}</span>

<button>+</button>

</div>

</template>

<scriptsetup>

importuseStorefrom'./store/index.js'

//导入store映射函数

import{storeToRefs}from'pinia';

conststore=useStore();

//映射num和price数据

const{num,price}=storeToRefs(store);

</script>

<stylescoped>

.num{

height:20px;

font-size:14px;

text-align:left;

line-height:20px;

border:1pxsolidrgb(182,182,182);

display:inline-block;

vertical-align:middle;

padding:015px;

margin:10px;

}

</style>任务8.2文章数据全局管理【知识链接】8.2.1state的定义和使用访问state中的数据首先需要将store导入,接着通过pinia中的storeToRefs方法将state中的数据映射到当前组件中。这样我们就可以在组件中直接使用state中的数据了。渲染工程文件,代码运行效果如图8-9所示。图8-9通过actions修改state数据任务8.2文章数据全局管理【知识链接】8.2.1state的定义和使用(5)如何做到点击页面上的加减按钮修改state中的数据呢?我们可以为页面上的加减按钮绑定如下代码。

<template>

<div>

<button@click="subNum">-</button>

<spanclass="num">商品数量:{{num}}</span>

<button@click="addNum">+</button>

</div>

<div>

<button@click="subPrice">-</button>

<spanclass="num">商品价格:{{price}}</span>

<button@click="addPrice">+</button>

</div>

</template><scriptsetup>

//......

//商品数量加减

functionsubNum(){

num.value-=1

console.log("state中的num:",store.$state.num)

}

functionaddNum(){

num.value+=1

console.log("state中的num:",store.$state.num)

}

//价格加减

functionsubPrice(){

price.value-=1

console.log("state中的price:",store.$state.price)

}

functionaddPrice(){

price.value+=1

console.log("state中的price:",store.$state.price)

}

</script>任务8.2文章数据全局管理【知识链接】8.2.1state的定义和使用运行代码,点击页面上的加减按钮,效果如图8-10所示,通过页面数据和控制台打印数据的对比不难发现,当我们操作页面数据时,state全局数据也发生了相应改变。图8-10state数据修改虽然通过这种方式能够修改全局state中的数据,但是不推荐这么操作。缺乏统一的管理容易照成数据的混乱和难以维护,所以此时我们就需要借助actions模块对数据进行统一管理,即管理逻辑代码部分。任务8.2文章数据全局管理【知识链接】8.2.2action的定义和使用(1)在上一个案例的基础上补充actions模块。在src目录中新actions.js文件,actions相当于组件中的methods,能够用于处理同步方法和异步方法。它们可以使用defineStore()中的actions属性定义,并且它们非常适合定义业务逻辑。在actions.js文件定义修改state数据的方法。

exportdefault{

//增加商品数量

addNum(){},

//减少商品数量

subNum(){},

//增加商品价格

addPrice(){},

//减少商品价格

subPrice(){}

}(2)在index.js中输入如下代码,将actions模块挂载到store中。

import{defineStore}from'pinia'

importstatefrom'./state.js'

importactionsfrom'./actions'

conststore=defineStore('shop',{

state,

actions

})

exportdefaultstore任务8.2文章数据全局管理【知识链接】8.2.2action的定义和使用(3)在actions.js中定义修改state数据的方法。

exportdefault{

//增加商品数量

addNum(n){this.num+=n},

//减少商品数量

subNum(n){this.num-=n},

//增加商品价格

addPrice(n){this.price+=n},

//减少商品价格

subPrice(n){this.price-=n}

}在actions方法中,可以通过this访问store实例并提供完整类型支持。方法中的“n”用于接收传入该方法的实参数值,如果需要传入多个属性,n可以使用对象类型。任务8.2文章数据全局管理【知识链接】8.2.2action的定义和使用(4)在App.vue中通过actions操作state数据,做到数据的统一管理。

//商品数量加减

functionsubNum(){

store.subNum(1)

console.log("state中的num:",store.$state.num)

}

functionaddNum(){

store.addNum(1)

console.log("state中的num:",store.$state.num)

}//价格加减

functionsubPrice(){

store.subPrice(1)

console.log("state中的price:",store.$state.price)

}

functionaddPrice(){

store.addPrice(1)

console.log("state中的price:",store.$state.price)

}任务8.2文章数据全局管理【知识链接】8.2.2action的定义和使用运行代码,点击页面上的加减按钮,效果如图8-11所示,通过actions同样能够对state全局数据进行操作。相较于在Vue实例中直接修改state中的数据,通过actions进行数据管理能够使管理方法更为集中统一,便于数据的维护。图8-11通过actions修改state数据任务8.2文章数据全局管理【知识链接】8.2.3getters的定义和使用我们继续在上一个案例的基础上补充getters模块,getter完全等同于Store状态的计算值,可以将其看作组件中的computed。getter的返回值会根据它的依赖被缓存起来,而且只有当它的依赖值发生了改变才会被重新计算。(2)在index.js中输入如下代码,将getters挂载至store中。

import{defineStore}from'pinia'

importstatefrom'./state.js'

importactionsfrom'./actions'

importgettersfrom'./getters'

conststore=defineStore('articles',{

state,

actions,

getters

})

exportdefaultstore(1)在src目录下新建getters.js。通过该模块计算商品总价,当state中的num或price改变时,商品总价将随之变化。

exportdefault{

totalPrice:(state)=>{

returnstate.num*state.price;

},

}任务8.2文章数据全局管理【知识链接】8.2.3getters的定义和使用(3)在App.vue中使用getter显示商品总价。

<template>

<div>

<button@click="subNum">-</button>

<spanclass="num">商品数量:{{num}}</span>

<button@click="addNum">+</button>

</div>

<div>

<button@click="subPrice">-</button>

<spanclass="num">商品价格:{{price}}</span>

<button@click="addPrice">+</button>

</div><div>

<!--使用getter-->

<spanclass="num">商品总价:{{totalPrice}}</span>

</div>

</template><scriptsetup>

importuseStorefrom'./store/index.js'

//导入store映射函数

import{storeToRefs}from'pinia';

conststore=useStore();

//映射num、price和totalPrice数据

const{num,price,totalPrice}=storeToRefs(store);//......</script>任务8.2文章数据全局管理【知识链接】8.2.3getters的定义和使用在App.vue中使用getters十分方便,仅需通过storeToRefs(store)方法解构出store中的数据即可直接使用。运行代码,效果如图8-12所示。图8-12getter数据计算效果任务总结与拓展通过该任务的实施,掌握了pinia库以及pinia的安装和配置及各个核心模块的使用方法,pinia目前已成为Vue开发者首选的状态管理工具,要求需要熟悉pinia中各核心模块的定义和使用方法。在pinia的官方文档中还提供了更多的API方法,可以通过官方文档继续深入学习。pinia具有和Vue3一致的函数编程思想,并能良好的支持TypeScript,读者可以在本章节基础之上继续强化学习,加深对pinia的了解。需要注意的是对于一些较为私密的全局业务数据,需要做好安全管理,以防数据泄露。【思考】如何在pinia中使用插件。35项目托管与发布任务9框架技术应用掌握gitee代码托管和研发协作平台的使用。【知识目标】掌握git仓库的创建。掌握将本地项目托管到gitee仓库的方法。【技能目标】能够熟练将项目托管在gitee上。【素质目标】培养定时备份项目的良好工作习惯。培养良好的合作精神。【项目背景】本任务负责将“就业职通车”网站进行托管和发布。通过学习Gitee平台的使用,实现将网站项目托管到Gitee上。任务规划本任务要求将“就业职通车”网站托管在Gitee上。学习目标任务9.1gitee仓库的使用【任务陈述】码云Gitee是开源中国社区在2013年推出的基于Git的代码托管服务,专为开发者提供稳定、高效、安全的云端软件开发协作平台,无论是个人、团队、或是企业,都能够用Gitee实现代码托管、项目管理、协作开发。在企业开发通常使用Gitee更的好去使用Git上传自己的代码和托管项目,同时也可以到Gitee官网去分享自己的项目。【任务分析】本任务要求掌握Gitee仓库的创建。任务流程如图9-1所示。图9-1任务流程图任务9.1gitee仓库的使用【任务实施】步骤一.登录Gitee创建一个名为“myweb”的仓库。浏览器访问gitee并登录,如图9-2所示。图9-2Gitee登录界面任务9.1gitee仓库的使用【任务实施】步骤一.登录Gitee创建一个名为“myweb”的仓库。单击“新建仓库”选项新建仓库,如图9-3所示。图9-3新建仓库入口任务9.1gitee仓库的使用【任务实施】步骤一.登录Gitee创建一个名为“myweb”的仓库。填写仓库相关信息,然后单击“创建”按钮完成仓库创建,如图9-4所示。图9-4新建仓库界面任务9.1gitee仓库的使用【任务实施】步骤一.登录Gitee创建一个名为“myweb”的仓库。创建成功后,自动跳转到仓库页面,如图9-5所示。图9-5仓库页面任务9.1gitee仓库的使用【知识链接】9.1.1新建仓库(1)登录gitee(网址:/),,还未拥有gitee账户的同学,请先申请账户。(2)在个人主页当中单击“新建仓库”选项,如图9-6所示。图9-6创建仓库任务9.1gitee仓库的使用【知识链接】9.1.1新建仓库(3)新建代码仓库配置,仓库的具体配置说明如表9-1如示。表9-1仓库具体配置描述任务9.1gitee仓库的使用【知识链接】9.1.1新建仓库(4)配置新仓库,根据平台提示填写相关信息,如图9-7所示。图9-7配置仓库任务9.1gitee仓库的使用【知识链接】9.1.2删除仓库新建仓库之后,如果需要删除。用户可以在仓库主页中仓库主页单击->“管理”「管理」->“仓库设置”「仓库设置」->“删除仓库”选项「删除仓库」对仓库执行进行删除操作。在确认操作后,要求对用户进行密码校验确认。校验密码后即可删除仓库,如图9-8、图9-9所示。图9-8进入仓库首页任务9.1gitee仓库的使用【知识链接】9.1.2删除仓库新建仓库之后,如果需要删除。用户可以在仓库主页中仓库主页单击->“管理”「管理」->“仓库设置”「仓库设置」->“删除仓库”选项「删除仓库」对仓库执行进行删除操作。在确认操作后,要求对用户进行密码校验确认。校验密码后即可删除仓库,如图9-8、图9-9所示。图9-9删除仓库任务9.1gitee仓库的使用【知识链接】9.1.3邀请团队成员新建仓库之后,如果需要邀请团队成员,可以通过仓库主页->仓库成员管理进行用户邀请,如图9-10所示。图9-10邀请团队成员任务9.2项目打包与发布【任务陈述】本任务要求将将“就业职通车”网站打包发布到Gitee仓库上【任务分析】本任务要求在Gitee(网址:/)上创建一个仓库,并将“就业职通车”网站打包发布到该Gitee仓库上。任务流程如图9-11所示。图9-11任务流程图任务9.2项目打包与发布【任务实施】步骤一.下载安装git软件。通过git官网下载git软件,如图9-12所示。图9-12git下载界面任务9.2项目打包与发布【任务实施】步骤一.下载安装git软件。双击运行下载下来的exe文件进行安装。单击“Next”按钮进入下一步操作,如图9-13所示。图9-13安装流程一任务9.2项目打包与发布【任务实施】步骤一.下载安装git软件。选择安装路径(一般不安装在系统盘),如图9-14所示。图9-14安装流程二任务9.2项目打包与发布【任务实施】步骤一.下载安装git软件。根据自己需要选择勾选对应选项,也可以保持默认配置选择,如图9-15所示。图9-15安装流程三任务9.2项目打包与发布【任务实施】步骤一.下载安装git软件。接下来都选择“Next”按钮,如图9-16所示。图9-16安装流程四任务9.2项目打包与发布【任务实施】步骤一.下载安装git软件。单击“Iinstall”按钮进行安装,如图9-17所示。图9-17安装流程五任务9.2项目打包与发布【任务实施】步骤二.在git软件中对账户和邮箱进行配置。打开Gitbash,如图9-18所示。图9-18GitBash任务9.2项目打包与发布【任务实施】配置账户和邮箱。使用如下命令配置账户:gitconfig–global“名字”

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论