项目中遇到的问题总结(第一个项目)

1.授权绑定微信公众号(微信网页授权)

mounted:function() {
    var uid = tools.cookie.get('id') //cookie缓存微信id
    if(uid == undefined ){//判断是否登录
        var _this = this;
        var data = tools.getHrefData();
        var code = data.code;
        if(code){
            _this.getWxInfo(code,function(wxInfo){

                    tools.ajax(  //tools  封装的函数
                        server.wx_register, //上传微信号
                        {
                            data:{
                                'wx_code': wxInfo.openid,
                                sname: wxInfo.nickname,
                                sex: wxInfo.sex,
                                headimgurl: wxInfo.headimgurl
                            },
                            success:function(res){
                                if(res && res.retcode == 200){
                                    
                                    tools.cookie.set('data',JSON.stringify(res.data))
                                    var data=JSON.parse(tools.cookie.get('data'))
                                    
                                    var userid= data.id;
                                    tools.cookie.set('id',userid)
                                    var id = tools.cookie.get('id')
                                    


                                }else{
                                    _this.$vux.toast.show({
                                            type: 'text',
                                            text: res.msg
                                    })
                                }
                            }
                        }
                    )

            });
        }
        else {//微信网页授权
             var weixinUrl = '';
              weixinUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxa0da85c9b3d8682d&redirect_uri=http://www.yiyisoft.net/ysxdwy/Public/www/index.html&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect';
              window.location.href = weixinUrl;
        }
        }else{
            return false;
        }           
},
methods: {
    getWxInfo:function(code,fn){
            var _this = this;
            tools.ajax(server.wx_info,{ // server.wx_info  后端接口
                data:{
                    code:code,
                    type: 'weixin',
                    isWeChat: true
                },
                success:function(res){
                    if(res.code == 1){
                        var wxInfo = JSON.parse(res.data);
                        fn&&fn(wxInfo);
                    }else{
                        _this.$vux.toast.show({//_this.$vux.toast.show  vux里的toast
                            type: 'text',
                            text: res.msg
                        })
                    }
                },
                error:function(){
                    _this.$vux.toast.show({
                            type: 'text',
                            text: "微信授权失败"
                    })
                }
            })
    }
}

2.路由跳转到指定页面的指定位置

  • A页面跳转到B页面指定位置

    this.$router.push({path:"login",params:{name:'share-login'}});

    1. path -> 是要跳转的路由路径,也可以是路由文件里面配置的 name 值,两者都可以进行路由导航
    1. params -> 是要传送的参数,参数可以直接key:value形式传递
    1. query -> 是通过 url 来传递参数的同样是key:value形式传递

3.实时统计textarea输入字数并限制字数

1201653-20180515155529161-416158748.png

html

<div class="row">
    <div class="ance-title">分享我的故事</div>
    <textarea  class="limit_2000 advice" placeholder="提示:请注意保护个人隐私"  v-model.trim="article">

    </textarea>
    <span class="limit statistics">*可输入字数0/2000</span>
    
</div>

less

.row{
    position: relative;
    .ance-title{
        width: 100%;
        height: 35px;
        background: yellow;
        padding: 5px 5px 5px 20px;
        box-sizing: border-box;
    }
    .advice {
        width: 100%;
        height: 300px;
        overflow-y: scroll;
        border: none;
        padding: 10px 20px;
        box-sizing: border-box;
        font-size: 14px;
        &::-webkit-scrollbar {
            display: none;
        }
    }
    @media( min-width: 320px) and(max-width:374px){
        .advice {
            height: 250px;
        }
    }
    .limit {
        position: absolute;
        top: 5px;
        right: 5px;
    }
}

jquery

//以下代码为了兼容iOS、Android
var bind_name = 'input';
if(navigator.userAgent.indexOf("MSIE") != -1) {//(此处是为了兼容IE)navigator.userAgent.indexOf来判断浏览器类型
     bind_name = 'propertychange';
}
if(navigator.userAgent.match(/androdid/i) == "android"){
     bind_name = 'keyup';
};
//截取限制字符长度
    //bind() 方法为被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数。
$(".limit_2000").bind(bind_name,function(){
     var limitSub = $(this).val().substr(0,2000);
     $(this).val(limitSub); //截取字符长度
     $(this).next(".statistics").html('*可输入字数'+limitSub.length+'/2000');//获取实时输入字符长度并显示
     if(limitSub.length == 2000) {
        $(".limit").css("color","red"); //超出指定字符长度标红提示
     }else {
        $(".limit").css("color","#333");
      }
});
原文链接 https://blog.csdn.net/huakaimandizss/article/details/79399868

1201653-20180619150551727-11602866.png

vue与mui实现textarea实时输入字数(很简单)

<!doctype html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <link href="../../css/mui.min.css" rel="stylesheet" />
        <link rel="stylesheet" href="../../font/iconfont.css" />
        <link rel="stylesheet" href="../../css/common.css" />
        <style>
            [v-cloak] {
                display: none !important;
            }
            .text-box {
                width: 100%;
                margin-top: 20px;
            }
            .mui-input-group {
                
            }
            .form-textarea {
                height: 200px;
                font-size: 14px;
            }
            .form-word-num {
                margin-bottom: 0;
                padding: 0 10px 10px;
                text-align: right;
            }
        </style>
    </head>

    <body>
        <div id="textarea" v-cloak>
            <header class="mui-bar mui-bar-nav">
                <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
                <h1 class="mui-title">{{title}}</h1>
            </header>
            <div class="mui-content">
                <div class="text-box">
                    <form class="mui-input-group">                      
                        <textarea class="form-textarea" v-bind:maxlength="contentLength" v-bind:placeholder="placeholder" v-model.trim="content">

                        </textarea>
                        <p class="form-word-num">{{content.length}}/{{contentLength}}</p>
                       
                    </form>
                </div>
            </div>
        </div>
        <script src="../../js/mui.min.js"></script>
        <script src="../../js/vue.js"></script>
        <script type="text/javascript">
            mui.init()
            (function(){
                var textarea = new Vue({
                    el:'#textarea',
                    data: {
                        title: 'textarea',
                        content: '',
                        placeholder: '请输入内容',
                        contentLength: 500
                    },
                    mounted: function() {
                        
                    },
                    methods: {
                        
                    }
                })
            })()
        </script>
    </body>

</html>

4.输入手机号获取验证码

1201653-20180515155545028-1936986056.png

vue文件

<div class="login-list">
    <div class="login">
        <span class="fl"><img src="../assets/images/3.png" alt=""></span>
        <input type="tel" maxlength="11" placeholder="请输入您的手机号码" v-model.trim="user_tel">
    </div>
    <div class="login">
        <span class="fl"><img src="../assets/images/4.png" alt=""></span>
        <input  type="tel" maxlength="6" placeholder="请输入验证码" v-model.trim="verify_code">
        <button v-show="sendCode" class="send" @click="getCode">验证码</button>
        <button v-show="!sendCode" class="again" v-bind="{'disabled':disabled}">{{send_time}}秒后重发</button>
    </div>
    <div class="login">
        <button class="btns btn-warning" @click="confirm">确认</button>
        <button class="btns btn-gray">返回</button>
    </div>
</div>

export default {
    data: function() {
        return {
            user_tel: '',
            verify_code: '',
            disabled: false,
                            sendCode: true,//布尔值,通过v-show控制显示'获取按钮'还是'倒计时'
                            send_time: 0  //倒计时计时器
        }
    },
    methods: {
        // 获取验证码
        getCode() {
            var _this = this
            var regphoto = 11&& /^((13|14|15|17|18)[0-9]{1}\d{8})$/;//手机号正则验证
            if(_this.user_tel =="") {
                _this.$vux.toast.show({
                        type: 'text',
                        text: '请输入手机号'
                })
                return;
            }else if(!regphoto.test(_this.user_tel)) {
                _this.$vux.toast.show({
                        type: 'text',
                        text: '输入正确的手机号'
                })
                return;
            }else {
                //60秒之后重发验证码
                _this.sendCode = false;
                    _this.send_time = 60;
                    var timer = setInterval(()=>{
                                            _this.disabled = true;
                    _this.send_time--;
                    if(_this.send_time<=0){
                        _this.sendCode = true;
                                                    _this.disabled = false;
                         clearInterval(timer);
                            
                        }
                },1000);

                tools.ajax(
                    url地址(后端给的),
                    {
                        data:{
                            user_tel: _this.user_tel,
                        },
                        success:function(res){
                            if(res && res.retcode == 200){
                                    console.log(res.data)
                                }else{
                                    _this.$vux.toast.show({
                                            type: 'text',
                                            text: res.msg
                                    })
                                }
                        },
                        error:function(err){
                            _this.$vux.toast.show({
                                type: 'text',
                                text: '请求失败'
                            })
                        }
                    }
                )
            }
        }

    },
    // 确认登录
    confirm() {
        var _this = this
        var regphoto = 11&& /^((13|14|15|17|18)[0-9]{1}\d{8})$/;//手机号正则验证
        if (_this.user_tel == "") {
            _this.$vux.toast.show({
                type: 'text',
                text: '请输入手机号'
            })
            return;
        }else if(!regphoto.test(_this.user_tel)){
            _this.$vux.toast.show({
                type: 'text',
                text: '手机号填写有误'
            })
            return;
        }else if(_this.verify_code == ""){

            _this.$vux.toast.show({
                type: 'text',
                text: '请输入验证码'
            })
            return;
        }else{
            var uid = tools.cookie.get('id')
            var id = tools.cookie.get('wenid')
                tools.ajax(
                    地址,
                    {
                        data:{
                            user_tel: _this.user_tel,
                            verify_code: _this.verify_code
                            
                        },
                        success:function(res){
                            if(res && res.retcode == 200){
                                    _this.toggle = !_this.toggle;
                                    _this.$vux.toast.show({
                                            type: 'success',
                                            text: '提交成功'
                                    })
                                    setInterval(()=>{
                                        window.location.href='成功之后跳转的地址'
                                    },2000)



                                }else{
                                    _this.$vux.toast.show({
                                            type: 'text',
                                            text: res.msg
                                    })
                                }
                        },
                        error:function(err){
                            _this.$vux.toast.show({
                                type: 'text',
                                text: '请求失败'
                            })
                        }
                    }
                )
        }

    }
}

5. html input的type设置为number后可以输入e

  • 正常情况下e不是数字所以不能被输入,原因是e在数学上代表2.71828,所以它也还是一个数字

          / /加上这段代码
          <input type='number' onkeypress='return( /[\d]/.test(String.fromCharCode(event.keyCode) ) )' />
  • 上述代码pc端解决,但移动端还可以输入

             <!-- HTML 限制文本框只能输入数字 onkeyup+onafterpaste  -->
          <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')">

其余知识点

  • JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个JSON字符串。(从一个对象中解析字符串)

      JSON.stringify({"a":"1","b":"2"})
    
      结果是:"{"a":"1","b":"2"}"
  • JSON.parse() 从一个字符串中解析JSON对象

      var str = '{"a":"1","b":"2"}';
    
      JSON.parse(str);
    
      结果是:Object{a:"1",b:"2"}
  • sessionStorage.setItem('key','value') 保存
  • sessionStorage.getItem('key','value') 获取
  • sessionStorage.remove('key') 移除
  • sessionStorage.clear() //clear清除所有的key/value

  • localStorage.setItem('key','value') 保存
  • localStorage.getItem('key','value') 获取
  • localStorage.remove('key') 移除
  • localStorage.clear //clear清除所有的key/value
  • vue的自带事件修饰符
  • prevent 阻止事件的默认行为
  • stop阻止事件的冒泡
  • once绑定只执行一次的事件
  • self 当且仅当事件是由自身触发事件回调函数

      @click.prevent/stop/once/self=""
使用FormData对象提交表单及上传图片
  • 取得form对象,作为参数传入到FormData对象

      <form name="form1" id="form1">  
          <input type="text" name="name" value="fdipzone">  
          <input type="text" name="gender" value="male">  
      </form>  
  • 创建一个FormData空对象,然后使用append方法添加key/value

      var data = new FormData();  
      data.append('name','fdipzone');  
      data.append('gender','male');
  • 提交上传图片时显示上传图片的进度

      progress:function(e){
          if(_this.image.length>0){
              var speed = parseInt((e.loaded/e.total)*100)+'%';
              _this.$vux.toast.show({
                  type: 'text',
                  text: speed
              })
          }
      }
  • 条件(三元)运算符(?:)
  • test ? expression1 : expression2

       <span class="fr" v-if="data.is_select == 0 ? '未':'已'">选中</span>
    
    
      test — 测试
      任何 Boolean 表达式。
    
      expression1
      test 为 true 时返回的表达式。 可能是逗点表达式。
    
      expression2
      test 为 false 时返回的表达式。 可能是逗点表达式。

``

    <script type="text/javascript">
    
    var b=5;
    
    (b == 5) ? a="true" : a="false";
    
    document.write(" --------------------------- "+a);
    
    </script>
    
    结果: --------------------------- true 
    
    <script type="text/javascript">
    
    var b=true;
    
    (b == false) ? a="true" : a="false";
    
    document.write(" --------------------------- "+a);
    
    </script>
    结果: --------------------------- false
  • 关于ios端与安卓端使用input 限制只能输入数字

     <input type="number" name="number" pattern="[0-9]*" />

转载于:https://www.cnblogs.com/DCL1314/p/9041379.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值