zoukankan      html  css  js  c++  java
  • 移动端开发基础【11】使用Vue.js注意事项

    使用Vue.js注意事项

            Uni-app项目发布在H5平台上时支持所有的Vue语法,发布到App和小程序时,由于平台限制,无法支持所有的vue语法,但是,uniapp仍旧是对vue语法支持度最高的跨端框架。

            Uniapp与Web平台相比,Vue.js在uni-app中使用的差异主要集中在两个方面:

    (1)uni-app新增加了一些生命周期,除了支持Vue实例的生命周期,还支持应用启动、页面显示等生命周期。

    (2)由于平台限制,相对比web平台,在小程序和APP端部分功能受到了限制。

    1.data属性

            Data必须声明为返回一个初始数据对象的函数;否则页面关闭时,数据不会自动销毁,再次打开该页面时,会显示上次数据。

     

    2.全局变量

            Uni-app全局变量的几种实现方式:

    (1)定义公用模块

    定义一个专用的模块,用来组织和管理全局变量,在需要用到全局变量的页面引入这个公用模块。

    例如:第一步:在uni-app项目根目录下创建common目录,然后在common目录下新建base.js用于定义公用的方法。

    const weburl = 'http://www.w3cschool.cn '; 
    
    const now = Date.now || function () { 
    
    return new Date().getTime(); 
    
    }; 
    
    const isArray = Array.isArray || function (obj) { 
    
    return obj instanceof Array; 
    
    }; 
    
    export default { 
    
     webUrl, 
    
     now, 
    
     isArray 
    
    }

        第二步:在pages/index/index.vue中引用定义的公用模块。

    <script> 
    
        import base from '../../common/base.js'; 
    
     
    
        export default { 
    
            data() { 
    
                return {}; 
    
            }, 
    
            onLoad(){ 
    
                console.log('now:' + base.now()); 
    
            }, 
    
            methods: { 
    
            } 
    
        } 
    
    </script>

            以上这种定义公用模块的方式维护时比较的方便,缺点是每次都要引入。  

    (2)挂载Vue.prototype

    将一些使用频率较高的常量或者方法,直接扩展到Vue.prototype上,每个Vue对象都会继承下来。

    例如:第一步:在main.js中挂载属性或方法

    const weburl = 'http://www.w3cschool.cn '; 
    
    const now = Date.now || function () { 
    
    return new Date().getTime(); 
    
    }; 
    
    const isArray = Array.isArray || function (obj) { 
    
    return obj instanceof Array; 
    
    };

    第二步:在pages/index/index.vue中调用

    <script>
    
        export default { 
    
            data() { 
    
                return {}; 
    
            }, 
    
            onLoad(){ 
    
                console.log('now:' + this.now()); 
    
            }, 
    
            methods: { 
    
            } 
    
        } 
    
    </script>

            挂载这种方式,只需要在main.js中定义好,就可以在每个页面中直接调用了。

            使用挂载方式还需要注意以下几点:

    1>  每一个页面中不要出现重复的属性或者方法名。

    2>  建议在Vue。Prototype上挂载的属性或者方法,可以加上一个统一的前缀。例如$now、global_now,这样的话在阅读代码时也容易与当前页面的内容区分开。

    (3)Vuex

    Vuex它是一种状态管理模式,更确切的说它是专门为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

       这里用登录后同步更新用户信息举例,简单说明Vuex的用法。

       第一步:在uni-app项目根目录下新建test目录,在test目录下创建index.js定义状态值

    const store = new Vuex.Store({ 
    
        state: { 
    
            login: false, 
    
            token: '', 
    
            avatarUrl: '', 
    
            userName: '' 
    
        }, 
    
        mutations: { 
    
            login(state, provider) { 
    
                console.log(state) 
    
                console.log(provider) 
    
                state.login = true; 
    
                state.token = provider.token; 
    
                state.userName = provider.userName; 
    
                state.avatarUrl = provider.avatarUrl; 
    
            }, 
    
            logout(state) { 
    
                state.login = false; 
    
                state.token = ''; 
    
                state.userName = ''; 
    
                state.avatarUrl = ''; 
    
            } 
    
        } 
    
    })

    第二步:需要在main.js挂载Vuex

    import store from './store' 
    
    Vue.prototype.$store = store 

     第三步:在pages/index/index.vue中使用 

    <script> 
    
        import { 
    
            mapState, 
    
            mapMutations 
    
        } from 'vuex'; 
    
     
    
        export default { 
    
            computed: { 
    
                ...mapState(['avatarUrl', 'login', 'userName']) 
    
            }, 
    
            methods: { 
    
                ...mapMutations(['logout']) 
    
            } 
    
        } 
    
    </script>

       上面实例的操作步骤:未登录时,提示去登录。跳转至登录页面后,点击登录,获取用户信息,同步更新状态后,返回到个人中心即可看到信息同步的结果。

       注意:对比前面的几种方式,该方式更加适合处理全局的并且值会发生变化的情况。

    (4)globalData

       小程序中可以在APP上声明全局变量,但是在Vue中不可以,uni-app中在APP.vue可以定义在globalData属性上,也可以使用API读写这个值。

       globalData方式支持vue和nvue共享数据,是目前nvue和vue共享数据的一种较好的方式。

       第一步:定义APP.vue

    <script> 
    
    export default { 
    
      globalData: { 
    
        text: 'text' 
    
      }, 
    
      onLaunch: function() { 
    
        console.log('App Launch') 
    
      }, 
    
      onShow: function() { 
    
        console.log('App Show') 
    
      }, 
    
      onHide: function() { 
    
        console.log('App Hide') 
    
      } 
    
    } 
    
    </script> 

    js操作globalData的方式如下:

    赋值:

    getApp().globalData.text = 'test'

    取值:

    console.log(getApp().globalData.text)

    如果需要把globalData的数据绑定到页面上,可在页面的onshow声明周期里进行变量重赋值。HBuilderX 2.0.3起,nvue页面在uni-app编译模式下,也支持onshow。

    总结

    1、.vue 和 .nvue 并不是一个规范,因此一些在 .vue 中适用的方案并不适用于 .nvue。

    2、Vue 上挂载属性,不能在 .nvue 中使用。

    3、.nvue 不支持 vuex

    4、如果希望 .vue 和 .nvue 复用一些方法的话,需要采用公用模块的方案,分别在 .vue 和 .nvue 文件中引入。

    官网:http://www.lenbor.com
  • 相关阅读:
    《文献管理与信息分析》速看提问
    《构建之法(第三版)》速读提问
    《深入理解计算机系统》速读提问
    2017-2018-1 20179205《Linux内核原理与设计》第八周作业
    《从问题到程序》第一、二章学习
    2017-2018-1 20179205 第三周测试 汇编混合编程
    2017-2018-1 20179205《Linux内核原理与设计》第七周作业
    第三周main参数传递-1 课堂测试
    2017-2018-1 20179205《Linux内核原理与设计》第六周作业
    2017-2018-1 20179203 《Linux内核原理与分析》第八周作业
  • 原文地址:https://www.cnblogs.com/lenbor/p/13038762.html
Copyright © 2011-2022 走看看