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
  • 相关阅读:
    poj 2411 Mondriaan's Dream 骨牌铺放 状压dp
    zoj 3471 Most Powerful (有向图)最大生成树 状压dp
    poj 2280 Islands and Bridges 哈密尔顿路 状压dp
    hdu 3001 Travelling 经过所有点(最多两次)的最短路径 三进制状压dp
    poj 3311 Hie with the Pie 经过所有点(可重)的最短路径 floyd + 状压dp
    poj 1185 炮兵阵地 状压dp
    poj 3254 Corn Fields 状压dp入门
    loj 6278 6279 数列分块入门 2 3
    VIM记事——大小写转换
    DKIM支持样本上传做检测的网站
  • 原文地址:https://www.cnblogs.com/lenbor/p/13038762.html
Copyright © 2011-2022 走看看