“这是sylu计算机协会第一次技术征文活动”
7.vue-cli
简化了程序员webpack创建工程化的Vue项目的过程
//vue-cli是npm上的一个全局包
使用npm install -g@vue/cli命令行安装
使用vue -v检查是否安装成功
//创建项目
vue create 项目名称
注意冻结窗口
处理方法:鼠标轻点再ctrl+c
-
vue项目中src目录构成:
assets文件夹,存放项目中用到的静态资源文件,例如css,图片等等 componeents文件夹:程序员封装可复用的组件,都要房子啊components目录之下 main.js是项目的入口文件,整个项目的执行首先执行此文件夹 App.vue是项目的根组件在工程化的项目中,vue将APP.vue渲染到index.html之中
- main.js
//导入vue包,得到vue构造函数
import Vue from 'vue'
//导入App.vue根组件,把这个玩意儿渲染到index上
import App from './App.vue'
new Vue({
//render渲染根组件渲染到index.html
render: h => h(App),
}).$mount('#app')
//$mount('#app')渲染到这个位置,或者手动渲染使用`el`
创建组件
- 在assests文件夹中新建
.vue文件 - 在main中导入
- 创建vue对象
组件中的data不能指向对象,组件中的data必须是一个函数
data(){ //组件中return的对象可以定义数据 return{ } }
注意组件中只能存在唯一根节点
组件结构
组件中必须的data必须有一个函数 在data中必须有一个return{}
export default{
data(){
return{
//在此定义数据
}
}
}
启用less语法
//启用less语法
<style lang="less">
.qwe{
background-color:red:
h1{
color:red;
}
}
</style>
组件中的多个组件之间的关系
- 组件被封装好,彼此是独立的,没有父子关系
- 组件使用时,之间嵌套关系之后会产生父子系工地关系
通过commponents节点进行注册组件
相当于标签之间
注意写在需要的vue组件之中
commponents:{
LEFT:left
}
<div>
<left></left>
</div>
通过components注册的是私有组件 只有在注册节点之下才可以使用此声明节点 在哪个组件之中注册就是哪个里边使用,不可跨组件使用
- 全局组件
导入 注册 使用三部分引用其他组件中注册的组件
解决上述问题从而实现注册全局组件的用法
在vue项目中的main.js入口文件中,通过Vue.commponent()方法,可以注册全局组件
import Count from '@+路径下的组件'
//参数1:字符串类型,表示注册的名称
//参数2:需要杯全局注册的组件
Vue.commponent('注册的名称',Count);
之后可以通过名称以标签的形式引用
- 组件中的props
props是组件的自定义属性,在封装通用组件的时候,合理的使用props可以极大的提高代码的复用性! 当组件多次使用之后,可以由用户进行自定义初始值 和data(){}平级写 通过页面中的属性节点(是指之前定义的那个标签名字就是属性节点)进行定义props的内部数据,实现多页面引用组件数据初始不同化
例子:
wxport default{
//名称合法就行,随便定义
props:['init'];
data(){
return{
}
}
}
//这里传入的是数字9,如果不加冒号传入的是字符串9(绑定了v-bind)
<mycount :init="9">
</mycount>
- props中的数据可以直接在模板结构上使用
- props的数据是只读的(只能看不能改)
- 将props中的值直接转存到data中进行读写。
data(){
return{
count:init
}
}
- props可以赋一个默认值,在属性节点没有赋值的话,用默认值渲染
- 数组无法定义默认值
props:{
init:{
//用default属性定义默认值
//在用户没有传值的时候生效
default:0,
//可以通过type属性定义属性的类型
//可通过数据检测进行判断
type:Number,
//required是必填项的意思(必填项校验)
required:ture
}
}
//和之前的数组格式效果相同
组件中的样式冲突
在默认的情况下,写.vue的组件中的样式会全局生效,因此会造成多个组件样式冲突的问题。
- 由于单页面应用程序的问题,所有的组件中的DOM元素都在index.html上呈现,全部的样式也会渲染到全部页面上
当写<style>时加入scoped属性,就解决了以上问题
/deep/写在选择器之前也是同等效果,可以该改变子类的属性
8.生命周期
生命周期是一个组件从创建->运行->销毁的整个阶段,强调的是一个时间段。 生命周期函数:是由vue框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行。
组件创建阶段 new Vue()->beforecreate->created->beforeMount->mounted->
组件运行阶段 beforeUpdate->updated
组件销毁阶段 brforeDestroy->destroy
new Vue()->beforecreate->created->beforeMount->mounted->beforeUpdate->updated->brforeDestroy->destroy
以下是创建阶段
new Vue()//创建实例对象
beforecreate()//此时组件中的props,data,methods都未被创建,刚刚结束初始化事件和生命周期函数
created()//在组件中的的props,data,methods都杯创建,但是模板结构未生成,可发起ajax请求拿数据但是因为模板结构未生成即在此无法操作dom属性**这一块用于请求数据渲染页面**
beforeMount()//将要把内存中编译完成的html结构渲染到浏览器中。此时浏览器中还没有dom结构
mounted()//此时dom结构已经渲染成功,将el全部换成dom属性,想操作dom元素最早只能在此阶段进行
以下是运行阶段
当返回数据发生改变,触发之下函数
beforeUpdate()//将要根据变化后的数据或者最新数据,重新渲染组件的模板结构
updated()//已经根据最新的数据完成dom结构的重新渲染。
以下是销毁阶段
brforeDestroy()将要销毁组件之前,此时尚未销毁,组件还处在正常工作简短
destroy()组件已经销毁,此组件在浏览器中对应的dom组件已经被完全移除