01、uniapp


1、uni-app的基本使用

1.1、uni-app介绍

uni-app是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉)等多个平台。

即使不跨端,uni-app同时也是更好的小程序开发框架。

具有vue和微信小程序的开发经验,可快速上手uni-app为什么要去学习uni-app?

相对开发者来说,减少了学习成木,因为只学会uni-app之后,即可开发出iOS、Android、H5、以及各种小程序的应用,不需要再去学习开发其他应用的框架,相对公司而言,也大大减少了开发成本。

1.2、环境搭建

安装编辑器HbuilderX 下载地址

HBuilderX是通用的前端开发工具,但为uni-app做了特别强化。下载App开发版,可开箱即用

安装微信开发者工具下裁地址

1.3、利用HbuilderX初始化项目

点击HbuilderX菜单栏文件>项目>新建

选择uni-app,填写项目名称,项目创建的目录

开发步骤,可查看官网 

1.4、项目目录和文件作用

pages.json文件用来对uni-app进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar等

manifest.json文件是应用的配置文件,用于指定应用的名称、图标、权限等。

App.vue是我们的跟组件,所有页面都是在 App.vue下进行切换的,是页面入口文件,可以调用应用的生命周期函数。

main.js是我们的项目入口文件,主要作用是初始化vue 实例并使用需要的插件。

uni.scss文件的用途是为了方便整体控制应用的风格。比如按钮颜色、边框风格,uni.scss文件里预置了一批scss变量预置。

unpackage就是打包目录,在这里有各个平台的打包文件

pages所有的页面存放目录

static静态资源目录,例如图片等

components组件存放目录

为了实现多端兼容,综合考虑编译速度、运行性能等因素,uni-app约定了如下开发规范:

  页面文件遵循Vue单文件组件(SFC)规范

  组件标签靠近小程序规范,详见uni-app组件规范

  接口能力(JSAPI)靠近微信小程序规范,但需将前缀wx替换为_uni,详见uni-app接口规范

  数据绑定及事件处理同|vue.js规范,同时补充了App及页面的生命周期

  为兼容多端运行,建议使用flex布局进行开发

2、全局配置和页面配置

2.1、通过globalStyle进行全局配置

用于设置应用的状态栏、导航条、标题、窗口背景色等。详细文档

属性 类型 默认值 描述
navigationBarBackgroundColor HexColor #F7F7F7 导航栏背景颜色(同状态栏背景色)
navigationBarTextStyle string white 导航栏标题颜色及状态栏前景颜色,仅支持black/white
navigationBarTitleText string   导航栏标题文字内容
backgroundColor HexColor #ffffff 窗口的背景色
backgroundTextStyle string dark 下拉 loading 的样式,仅支持dark / light
enablePullDownRefresh Boolean false 是否开启下拉刷新,详见页面生命周期。
onReachBottomDistance Number 50 页面上拉触底事件触发时距页面底部距离,单位只支持px,详见页面生命周期

2.2、创建新的message页面

右键pages新建message目录,在message目录下右键新建.vue文件,并选择基本模板

<template>
    <view>
        这是信息页面
    </view>
</template>

<script>
</script>

<style>
</style>

2.3、通过pages来配置页面

属性 类型 默认值 描述
path string   配置页面路径
style object   配置页面窗口表现,配置项参考pageStyle

pages数组中第一项表示应用启动页

    "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
        {
            "path": "pages/index/index",
            "style": {
                "navigationBarTitleText": "uni-app"
            }
        }
    ]

通过style修改页面的标题和导航栏背景色,并且设置h5下拉刷新的特有样式

        {
            "path":"pages/message/message",
            "style":{
                // 导航栏背景颜色
                "navigationBarBackgroundColor":"#007AFF",
                // 导航栏标题颜色及状态栏前景颜色
                "navigationBarTextStyle":"white",
                // 是否开启下拉刷新
                "enablePullDownRefresh":true,
                // 设置为 true 则页面整体不能上下滚动
                "disableScroll":true,
                // 设置编译到 H5 平台的特定样式
                "h5":{
                    // 下拉刷新
                    "pullToRefresh":{
                        // 颜色值
                        "color":"#4CD964"
                    }
                }
            }
        }

2.4、配置tabbar

如果应用是一个多tab应用,可以通过 tabBar配置项指定tab栏的表现,以及 tab切换时显示的对应页。

Tips

当设置position为 top时,将不会显示 icon

tabBar中的list 是一个数组,只能配置最少2个、最多5个tab,tab按数组的顺序排序

属性说明:

属性 类型 必填 默认值 描述 平台差异说明
color Hexcolor   tab 上的文字默认颜色  
selectedColor HexColor   tab 上的文字选中时的颜色  
backgroundcolor HexColor   tab 的背景色  
borderStyle string black tabbar上边框的颜色,仅支持black/white App 2.3.4+支持其他颜色值
list Array   tab 的列表,详见list属性说明,最少2个、最多5个 tab  
position string bottom 可选值 bottom、top top值仅微信小程序支持

其中 list接收一个数组,数组中的每个项都是一个对象,其属性值如下:

属性 类型 必填 说明
pagePath string 页面路径,必须在pages中先定义
text string tab上按钮文字,在5+APP和 H5平台为非必填。例如中间可放一个没有文字的+号图标
iconPath string 图片路径,icon大小限制为40kb,建议尺寸为81px* 81px,当postion为 top时,此参数无效,不支持网络图片,不支持字体图标
selectedlconPath string 选中时的图片路径,icon大小限制为40kb,建议尺寸为81px*81px,当postion为 top时,此参数无效
 "tabBar": {
     "list": [{
         "text": "首页",
         "pagePath": "pages/index/index",
         "iconPath": "static/tabs/home.png",
         "selectedIconPath": "static/tabs/home-active.png"
     }, {
         "text": "信息",
         "pagePath": "pages/message/message",
         "iconPath": "static/tabs/message.png",
         "selectedIconPath": "static/tabs/message-active.png"
     }, {
         "text": "我们",
         "pagePath": "pages/contact/contact",
         "iconPath": "static/tabs/contact.png",
         "selectedIconPath": "static/tabs/contact-active.png"
     }]
 }

2.5、condition启动模式配置

启动模式配置,仅开发期间生效,用于模拟直达页面的场景,如:小程序转发后,用户点击所打开的页面。

属性说明:

属性 类型 是否必填 描述
current Number 当前激活的模式,list节点的索引值
list Array 启动模式列表

list说明:

属性 类型 是否必填 描述
name string 启动模式名称
path string 启动页面路径
query string 启动参数,可在页面的onLoad 函数里获得
 "condition":{
     "current":0,
     "list":[{
         "name":"详情页",
         "path":"pages/detail/detail",
         "query":"id=9"
     }]
 }

3、组件的基本使用

uni-app提供了丰富的基础组件给开发者,开发者可以像搭积木一样,组合各种组件拼接成自己的应用uni-app中的组件,就像(HTML中的div 、p、span等标签的作用一样,用于搭建页面的基础结构

3.1、text文本组件

001 - text组件的属性

属性 类型 默认值 必填 说明
selectable boolean false 文本是否可选
space string   显示连续空格,可选参数:ensp .emsp .nbsp
decode boolean false 是否解码

text组件相当于行内标签、在同一行显示

除了文本节点以外的其他节点都无法长按选中

002 - 代码案例

 <template>
     <view>
         <view>
             <text>这是信息页面</text>
         </view>
         <view>
             <text selectable>这是信息页面selectable</text>
         </view>
         <view>
             <!-- 中文字符空格一半大小 -->
             <text space="ensp">这是信息    页面</text>
         </view>
         <view>
             <!-- 中文字符空格大小 -->
             <text space="emsp">这是信息    页面</text>
         </view>
         <view>
             <!-- 根据字体设置的空格大小 -->
             <text space="nbsp" style="font-size: 20px;">这是信息 页面</text>
         </view>
         <view>
             <text decode>这是信息页面 &gt;</text>
         </view>
     </view>
 </template>

3.2、view容器组件

view视图容器,类似于HTML中的div

001 - 组件的属性

属性 类型 默认值 必填 说明
hover-class string none 指定按下去的样式类。当hover-class="none”时,没有点击态效果
hover-stop-propagation boolean false 指定是否阻止本节点的祖先节点出现点击态
hover-start-time number 50 按住后多久出现点击态,单位毫秒
hover-stay-time number 400 手指松开后点击态保留时间,单位毫秒

002 - 代码案例

 <template>
     <view>
         <view class="box" hover-class="action" hover-start-time="2000" hover-stay-time="2000">
             我是view
         </view>
         
         <view class="box1" hover-class="action2">
             <view class="box2" hover-class="action2" hover-stop-propagation>
                 我是view
             </view>
         </view>
     </view>
 </template>
 <style>
     .box{
         width: 100rpx;
         height: 100rpx;
         background-color: #007AFF;
     }
     .action{
         background-color: #DD524D;
     }
     .box1{
         width: 400rpx;
         height: 400rpx;
         background-color: #007AFF;
     }
     .action1{
         background-color: #DD524D;
     }
     .box2{
         width: 200rpx;
         height: 200rpx;
         background-color: #4CD964;
     }
     .action2{
         background-color: #F0AD4E;
     }
 </style>

 

3.3、button按钮组件

001 - 组件的属性

属性 类型 默认值 必填 说明
size String default 按钮的大小
type String default 按钮的样式类型
plain Boolean false 按钮是否镂空,背景色透明
disabled Boolean false 是否禁用
loading Boolean false 名称前是否带loading图标

002 - 代码案例

 <template>
     <view>
         <button size="mini">mini按钮</button>
         
         <button type="default">白色的按钮</button>
         
         <button type="primary">蓝色的按钮</button>
         
         <button type="warn" >红色的按钮</button>
         
         <button type="default" plain>镂空的按钮</button>
         
         <button type="default" disabled>禁用的按钮</button>
         
         <button type="default" loading>loading图标</button>
     </view>
 </template>

3.4、image图片组件

001 - 组件的属性

属性 类型 默认值 必填 说明
src String   图片资源地址
mode String scaleToFill 图片裁剪、缩放的模式

002 - 组件的代码

 <template>
     <view>
         <image src="../../static/logo.png" mode="aspectFit"></image>
         
         <image src="../../static/logo.png" mode="aspectFill"></image>
     </view>
 </template>

4、uni-app中的样式

1、rpx即响应式px,一种根据屏幕宽度自适应的动态单位。以750宽的屏幕为基准,750rpx恰好为屏幕宽度。屏幕变宽,rpx实际显示效果会等比放大。

 <template>
     <view class="box">
         测试文字
     </view>
 </template>
 <style>
     .box{
         width: 750rpx;
         height: 750rpx;
         background-color: #4CD964;
         font-size: 20rpx;
         color: #FFFFFF;
     }
 </style>

2、使用@import 语句可以导入外联样式表,@import后跟需要导入的外联样式表的相对路径,用;表示语句结束

 <template>
     <view class="box">
         <text class="test-text">测试文字</text>
     </view>
 </template>
 <style>
 @import url("./test.css");
 </style>

3、支持基本常用的选择器class、id、element等

4、在uni-app中不能使用*选择器。

5、page相当于body节点

6、定义在App.vue中的样式为全局样式,作用于每一个页面。在pages目录下的vue文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖App.vue中相同的选择器。

7、uni-app支持使用字体图标,使用方式与普通web项目相同,需要注意以下几点:

  • 字体文件小于40kb,uni-app会自动将其转化为base64格式

  • 字体文件大于等于40kb,需开发者自己转换,否则使用将不生效

  • 字体文件的引用路径推荐使用以~@开头的绝对路径。

 @font-face {
     font-family: test1-icon;
     src: url( '~@/static/iconfont.ttf');
 }

5、uni-app中的数据绑定

在页面中需要定义数据,和我们之前的vue一摸一样,直接在data中定义数据即可

 export default{
     data(){
         return{
             msg:'hello world'
         }
     }
 }

5.1、插值表达式的使用

  • 利用插值表达式渲染基本数据

 <view>{{msg}}</view>
  • 在插值表达式中使用三元运算

 <view>{{flag ? '我是真的':'我是假的'}}</view>
  • 基本运算

 <view>{{1+1}}</view>

5.2、v-bind动态绑定属性

在data中定义了一张图片,我们希望把这张图片渲染到页面上

 export default {
     data() {
         return {
             img:'./../../static/logo.png'
         }
     }
 }
  • 利用v-bind进行渲染

 <image v-bind:src="img" mode=""></image>
  • 还可以缩写成:

 <image :src="img" mode=""></image>

5.3、v-for的使用

data中定以一个数组,最终将数组渲染到页面上

 export default {
     data() {
         return {
             arr: [{
                 name: 'xiaohe',
                 age: 20
             }, {
                 name: 'xiaobai',
                 age: 21
             }, {
                 name: 'xiaoli',
                 age: 22
             }, {
                 name: 'xiaoming',
                 age: 23
             }]
         }
     }
 }
  • 利用v-for进行循环

 <view v-for="(item,index) in arr" :key="index">名字: {{item.name}} --- 年龄:{{item.age}}</view>

6、uni中的事件

6.1、事件绑定

在uni中事件绑定和vue中是一样的,通过v-on进行事件的绑定,也可以简写为@

 <button type="default" @click="tapHandle">按钮</button>
<button type="default" v-on:click="tapHandle">按钮</button>

事件函数定义在methods中

 methods:{
     tapHandle(e){
         console.log("点击事件",e)
     }
 }

6.2、事件传参

  • 默认如果没有传递参数,事件函数第一个形参为事件对象

 // template
 <button type="default" v-on:click="tapHandle">按钮</button>
// script
 methods:{
     tapHandle(e){
         console.log("点击事件",e)
     }
 }
  • 如果给事件函数传递参数了,则对应的事件函数形参接收的则是传递过来的数据

 // template
 <button type="default" v-on:click="tapHandle(55)">按钮</button>
// script
 methods:{
     tapHandle(num){
         console.log("点击事件",num)
     }
 }
  • 如果给事件函数传递参数了,则对应的事件对象以最后形参$event传递

 // template
 <button type="default" v-on:click="tapHandle(55,$event)">按钮</button>
// script
 methods:{
     tapHandle(num,e){
         console.log("点击事件",num,e)
     }
 }

7、uni的生命周期

7.1、应用的生命周期

生命周期的概念:一个对象从创建、运行、销毁的整个过程被成为生命周期

生命周期函数:在生命周期中每个阶段会伴随着每一个函数的触发,这些函数被称为生命周期函数

uni-app支持如下应用生命周期函数:

函数名 说明
onLaunch 当uni-app 初始化完成时触发(全局只触发一次)
onShow 当uni-app启动,或从后台进入前台显示
onHide 当uni-app从前台进入后台
onError 当uni-app报错时触发

7.2、页面的生命周期

uni-app支持如下页面生命周期函数:

函数名 说明
onLoad 监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参),参考示例
onShow 监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
onReady 监听页面初次渲染完成。
onHide 监听页面隐藏

8、刷新加载

8.1、下拉刷新

在uni-app中有两种方式开启下拉刷新

  • 需要在pages.json里,找到的当前页面的pages节点,并在style选项中开启enablePullDownRefresh

  • 通过调用uni.startPullDownRefresh方法来开启下拉刷新

001 - pages配置

 {
     "path": "pages/list/list",
         "style":{
             "enablePullDownRefresh":true//开启下拉刷新
         }
 },

002 - 代码演示1

 <template>
     <view class="">
         <view>list页面</view>
         <view v-for="(item,index) in list">{{item}}</view>
     </view>
 </template>
<script>
     export default{
         data(){
             return{
                 list:['css','java','javascript']
             }
         },
         onPullDownRefresh() {
             
             setTimeout(()=>{
                 this.list = ['css1','java1','javascript1']
                 uni.stopPullDownRefresh()
             },2000)
         }
     }
 </script>

003 - 代码演示2

 <template>
     <view class="">
         <view>list页面</view>
         <view v-for="(item,index) in list">{{item}}</view>
         
         <button type="default" @click="startPull">按钮</button>
     </view>
 </template>
<script>
     export default{
         data(){
             return{
                 list:['css','java','javascript']
             }
         },
         onPullDownRefresh() {
             setTimeout(()=>{
                 this.list = ['css1','java1','javascript1']
                 uni.stopPullDownRefresh()
             },2000)
         },
         methods:{
             startPull(){
                 uni.startPullDownRefresh()
             }
         }
     }
 </script>

8.2、上拉加载

  • 需要在pages.json里,配置onReachBottomDistance的值,页面上拉触底事件触发时距页面底部距离默认是50

001 - pages配置

 {
     "path": "pages/list/list",
         "style":{
             "onReachBottomDistance":200
         }
 }

002 - 代码演示

 <template>
     <view class="">
         <view>list页面</view>
         <view class="item" v-for="(item,index) in list">{{item}}</view>
     </view>
 </template>
<script>
     export default{
         data(){
             return{
                 list:['css','java','javascript','css','java','javascript']
             }
         },
         methods:{
             startPull(){
                 uni.startPullDownRefresh()
             }
         },
         onReachBottom() {
             this.list = [...this.list,...["java","c++","c#","python"]]
         }
     }
 </script>
<style>
     .item{
         height: 160px;
         line-height: 160px;
     }
 </style>

9、网络请求

在uni中可以调用uni.request方法进行请求网络请求

需要注意的是:在小程序中网络相关的API在使用前需要配置域名白名单。

发送get请求

 <template>
     <view class="">
         <button type="default" @click="getData">按钮</button>
     </view>
 </template>
<script>
     export default{
         data(){
             return{
 ​
             }
         },
         methods:{
             getData(){
                 uni.request({
                     url:'https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata',
                     success(res) {
                         console.log(res)
                     }
                 })
             }
         },
 ​
     }
 </script>

10、数据缓存

10.1、setStorage

将数据存储在本地缓存中指定的key中,会覆盖掉原来该key对应的内容,这是一个异步接口

 <template>
     <view class="">
         <button type="default" @click="setStor">按钮</button>
     </view>
 </template>
<script>
     export default{
         methods:{
             setStor(){
                 uni.setStorage({
                     key:'id',
                     data:100,
                     success() {
                         console.log("存储成功")
                     }
                 })
             }
         }
     }
 </script>

10.2、setStorageSync

将data存储在本地缓存中指定的 key中,会覆盖掉原来该key对应的内容,这是一个同步接口。

代码演示

 <template>
     <view class="">
         <button type="default" @click="setStorSync">按钮</button>
     </view>
 </template>
<script>
     export default{
         methods:{
             setStorSync(){
                 uni.setStorageSync("id",101)
                 console.log("hhhh")
             }
         }
     }
 </script>

10.3、getStorage

从本地缓存中异步获取指定 key 对应的内容。

代码演示

 <template>
     <view class="">
         <button type="default" @click="setStorSync">按钮</button>
     </view>
 </template>
<script>
     export default {
         methods: {
             setStorSync() {
                 uni.getStorage({
                     key: 'id',
                     success: res => {
                         console.log(res)
                     }
                 })
             }
         }
     }
 </script>

10.4、getStorageSync

从本地缓存中同步获取指定 key对应的内容。

代码演示

 <template>
     <view class="">
         <button type="default" @click="getStorSync">按钮</button>
     </view>
 </template>
<script>
     export default {
         methods: {
             getStorSync() {
                 let id = uni.getStorageSync("id")
                 console.log(id)
             }
         }
     }
 </script>

10.5、removestorage

从本地缓存中异步移除指定key

代码演示

 <template>
     <view class="">
         <button type="default" @click="removeStora">按钮</button>
     </view>
 </template>
<script>
     export default{
         methods:{
             removeStora(){
                 uni.removeStorage({
                     key:"id",
                     success(res) {
                         console.log(res)
                     }
                 })
             }
         }
     }
 </script>

10.6、removestorageSync

从本地缓存中同步移除指定key

代码演示

 <template>
     <view class="">
         <button type="default" @click="removeStorSync">按钮</button>
     </view>
 </template>
<script>
     export default {
         methods: {
             removeStorSync() {
                 uni.removeStorageSync("id")
                 
             }
         }
     }
 </script>

11、图片

11.1、上传和预览图片

uni.chooselmage方法从本地相册选择图片或使用相机拍照。

案例代码

 <template>
     <view class="">
         <button type="default" @click="removeStora">按钮</button>
         <image v-for="(item,index) in urlArr" :src="item" mode="" @click="previewImg(item)"></image>
     </view>
 </template>
<script>
     export default{
         data(){
             return{
                 urlArr:[]
             }
         },
         methods:{
             // 上传图片
             removeStora(){
                 uni.chooseImage({
                     count:5,
                     success:res => {
                         this.urlArr = res.tempFilePaths
                     }
                 })
             },
             // 预览图片
             previewImg(url){
                  uni.previewImage({
                      current:url,
                      urls:this.urlArr
                  })
             }
         }
     }
 </script>

12、条件注释

条件编译是用特殊的注释作为标记,在编译时根热这些特殊的注释,将注释里面的代码编译到不同平台。

写法:以#ifdef 加平台标识开头,以#endif结尾。

12.1、平台标识

平台
APP-PLUS 5+App
H5 H5
MP-WEIXIN 微信小程序
MP-ALIPAY 支付宝小程序
MP-BAIDU 百度小程序
MP-TOUTIAO 头条小程序
MP-QQ QQ小程序
MP 微信小程序/支付宝小程序/百度小程序/头条小程序/QQ小程序

12.2、组件的条件注释

 <template>
     <view class="">
         <!-- #ifdef H5 -->
         <view class="font-color">H5 {{msg}}</view>
         <!-- #endif -->
         
         <!-- #ifdef MP-WEIXIN -->
         <view class="font-color">小程序 {{msg}}</view>
         <!-- #endif -->
     </view>
 </template>
<script>
     export default{
         data(){
             return{
                 // #ifdef H5
                 msg:"xiaohe",
                 // #endif
                 
                 // #ifdef MP-WEIXIN
                 msg:"laoli",
                 // #endif
             }
         },
         methods:{
             
         }
     }
 </script>
 <style>
     /* #ifdef H5 */
     .font-color{
         color: red;
     }
     /* #endif */
     
     /* #ifdef MP-WEIXIN */
     .font-color{
         color: #007AFF;
     }
     /* #endif */
 </style>

13、导航

13.1、navigator导航

跳转到普通页面

 <navigator url="/pages/detail/detail">普通页面</navigator>

跳转到tabbar页面

 <navigator url="/pages/message/message" open-type="switchTab">tabbar页面</navigator>

13.2、编程式导航

跳转到普通页面

 <button type="default" @click="getNav">普通页面</button>
 ​
 getNav(){
     uni.navigateTo({
         url:'/pages/detail/detail'
     })
 }

跳转到tabbar页面

 <button type="default" @click="getSwich">tabbar页面</button>
 ​
 getSwich(){
     uni.switchTab({
         url:'/pages/message/message'
     })
 }

13.3、传参

 // list
 getNav(){
     uni.navigateTo({
         url:'/pages/detail/detail?id=10'
     })
 }
 ​
 // detail
 <script>
     export default{
         onLoad(param) {
             console.log(param)
         }
     }
 </script>

14、组件创建

在uni-app中,可以通过创建一个后缀名为vue的文件,即创建一个组件成功,其他组件可以将该组件通过impot的方式导入,在通过components进行注册即可

创建login组件,在component中创建login目录,然后新建login.vue文件

 <template>
     <view class="">
         <view>你好</view>
     </view>
 </template>
<script>
     export default{
         data(){
             return{
                 msg:0
             }
         }
     }
 </script>

在其他组件中导入该组件并注册

 import login from '@/component/login/login.vue'

注册组件

 components:{
     login
 }

组件的生命周期函数

方法 说明
beforeCreate 在实例初始化之后被调用。详见
created 在实例创建完成后被立即调用。详见
beforeMount 在挂载开始之前被调用。详见
mounted 挂载到实例上去之后调用。详见注意:此处并不能确定子组件被全部挂载,如果需要子组件完全挂载之后在执行操作可以使用$nextTick Vue官方文档
beforeUpdate 数据更新时调用,发生在虚拟DOM打补丁之前。详见
update 由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子。详见
beforeDestroy 实例销毁之前调用。在这一步,实例仍然完全可用。详见
destroyed vue实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。详见

案例

 <template>
     <view class="">
         <view id="login">你好</view>
     </view>
 </template>
<script>
     export default{
         data(){
             return{
                 msg:4
             }
         },
         beforeCreate() {
             console.log("beforeCreate",this.msg)
         },
         created() {
             console.log("created",this.msg)
         },
         beforeMount() {
             console.log("beforeMount",document.getElementById("login"))
         },
         mounted() {
             console.log("mounted",document.getElementById("login"))
         },
         beforeDestroy(){
             console.log("beforeDestroy",this.msg)
         },
         destroyed() {
             console.log("destroyed",this.msg)
         }
     }
 </script>
 

 <template>
     <view class="content">
         <login v-if="flag"></login>
         
         <button type="default" @click="destroy">销毁</button>
     </view>
 </template>
<script>
     import login from '@/component/login/login.vue'
     export default {
         components:{
             login
         },
         data() {
             return {
                 flag: true
             }
         },
         methods: {
             destroy(){
                 this.flag = false
             }
         }
     }
 </script>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM