vue2.0用法技巧汇总

1.class拼接:

2.select下拉截取:

<template>
    <!--vip班支付报名页面-->
    <div id="payRecordMain">
        <div class="pay_record_vip">
            <div class="pay_message">报考城市<span class="cityName" v-text="cityName">南京</span></div>
            <div class="pay_message">报考驾照类别
                <span class="getSelectType">
                    <span class="driveTypeText">{{driveType.description}}</span>
                    <select class="exam_type" @change="selectDriveType(driveType)" v-model="driveType">
                        <option v-for="licenseList in vehicleKindPriceVoList" :value="licenseList">{{licenseList.description}}</option>
                    </select>
                    <img class="img_arrow" src="../assets/select_arrow.png" alt="">
                </span>
            </div>
            <div class="pay_message2">
                <span class="baoming">报名费</span>
                <span style="float:right">
                    <span :class="{ling_throught:hasRecommend||(discount&&discount!='0')}">{{totalPay|formatMoney}}</span> 
                    <span class="totalPayStyle" v-if="hasRecommend||(discount&&discount!='0')">{{newTotalPay|formatMoney}}</span>
                </span>
            </div>
            <div class="pay_message3" v-if="hasRecommend"><span>通过<span v-text="recommendedName"></span>推荐你使用多伦学车,已为您优惠</span><span v-text="recommendedRelief"></span><span>元</span></div>
            <div class="select">请选择支付方式</div>
            <label for="radio2">
                    <div class="payment">
                        <img src="../assets/weixinzhifu.png">
                        <span class="pay_text">微信支付</span>
                        <input id="radio2" type="radio" name="radio" value="2" checked="checked"/>
                    </div>
                </label>
            <div class="agree">

                <span class="agreeTest1">同意</span>
                <span @click="agree_select()" class="agreeTest2">《支付免责条款》</span>
                <div class="checkboxAgree2" @click="selectInput()" :class="{checkboxAgree2Sel:checkboxAgree2==1}">
                </div>
            </div>
        </div>
        <div class="goPaybuttom_vip">
                <div class="heji">合计:
                    <span v-if="!hasRecommend&&!discount&&discount=='0'" class="money2">{{totalPay|formatMoney}}</span>
                    <span v-if="hasRecommend||(discount&&discount!='0')" class="money2" >{{newTotalPay|formatMoney}}</span>
                </div>
                <div class="submit" @click="goPay()">
                    去结算(1)
                </div>
            </div>
    </div>
</template>
<script>
import Vue from 'vue';
import tool from '../common/tools';
import httpService from '../common/httpService';
import commonErr from './CommonErr';
import commonToast from '../common/commonToast';
import {Toast ,Loadmore} from 'mint-ui';
import MessageBox from 'mint-ui/lib/message-box';
import 'mint-ui/lib/loadmore/style.css';
import 'mint-ui/lib/toast/style.css';
import 'mint-ui/lib/message-box/style.css';
import '../css/payRecordVip.css';

Vue.component(Loadmore.name, Loadmore);
Vue.component(MessageBox.name, MessageBox);
export default {
    data() {
        return {
            hideTime:2000,
            checkboxAgree2:1,//默认免责条款勾选框选中
            driveType:"",//驾照类别,初始C1类型
            settleAccounts:null, 
            payParams:{},
            phoneNum:null, //推荐人电话
            getCount:{},//获取优惠人参数
            getcodeUrl:" ",
            recommendId:" ", //推荐人Id
            recommendPhone:" ", //推荐人号码
            discount:tool.Request('discount')?tool.Request('discount'):"0 ",//活动优惠金额
            cityName:tool.Request('cityName'), //获取城市名
            vehicleKindPriceVoList:[],//加省略号
            totalPay:0,//结算价格
            hasRecommend:false, //是否有推荐人
            newTotalPay:null,
            recommendedName:" ",//推荐人姓名
            //微信支付 zhw 2016-09-07
            appId:" ",
            timeStamp:" ",
            nonceStr:" ",
            packageValue:" ",
            paySign:" ",
            toGopay:1,
            testCouponsCut:['ouIgswP-H4FMZIwsbz8DdCEd0LaM'],
            valueForWeChats:" ",
            recommendedRelief:"",
            openid:tool.getUrlRequestParam().openid,
            cityClassId: tool.Request('cityClassId'),
        }
        
    },
    components:{
        commonErr:commonErr
    },
    filters:{
        formatMoney : function(money){
            /*var floatNum=parseFloat(money),
                intNum=parseInt(money),
                subtract=floatNum-intNum;
            if(subtract>=0.5){
                subtract=1;
            }else{
                subtract=0;
            }
            money=intNum+subtract;*/
            money=parseFloat(money).toLocaleString();
            return "¥"+money;
          }
    },
    mounted: function() {
        this.payRecordVipMain();
    },
    methods:{
        payRecordVipMain:function(){
            var self=this;
            self.recommendedRelief=tool.Request('recommendedRelief');
            self.vehicleKindPriceVoList=JSON.parse(decodeURIComponent(tool.Request("vehicleKindPriceVoList")));
            if (window.valueForWeChat) {
                self.valueForWeChats = window.valueForWeChat;
            }
            self.settleAccounts = "/topayServlet";
            self.getcodeUrl ='/mw/recommendpolite/reliefAmount.do';//获取推荐人接口
            
            //渲染当前页面信息
            for(var i=0;i<self.vehicleKindPriceVoList.length;i++){
                var val=self.vehicleKindPriceVoList[i];
                if(val.vehicleKind=="C1"){
                    self.getDescriptions = val.description;
                    self.driveType = val;
                    self.totalPay = val.expense;
                    self.newTotalPay = val.expense;
                    
                    //活动减免
                    if (self.discount) {
                        self.newTotalPay = (Math.round(self.newTotalPay * 100) - Math.round(self.discount * 100)) / 100;//减免后的金额
                        if (self.newTotalPay < 0) {
                            self.newTotalPay = 0;
                        }
                    }
                    
                }
                
                if(val.description.length>0){
                    val.description=val.vehicleKind +"( "+val.description+") ";
                }else{
                    val.description=val.vehicleKind;
                }
            }
            
            //获取推荐人号码参数
            self.getCount = {
                isAchieve:1,
                recommendPhoneNo:"",
                recommendedPhoneNo: self.valueForWeChats.phoneNo,
                needBind: 0,
                type_wc: 2,
            };
              self.getBackRecommendMsg(self.getcodeUrl, self.getCount);
        },
        //获取推荐信息
        getBackRecommendMsg:function (url, params) {
            var self=this;
            httpService.get(url, params).then(function (data) {
                if (data.code != commonToast["MSG_SUCCESS"]) {
                    self.hasRecommend = false;
                    //data.code==1002:没有查询到该手机的相关推荐记录哦
                    if(data.code==1002){
//                      MessageBox.alert(data.msg.then(action => {
//                          self.getRecommend();
//                        });
                    }else{
                        Toast({
                            message:data.msg,
                            position: 'middle',
                            duration:self.hideTime
                        });
                    }
                    return;
                }
                self.hasRecommend = true;
                self.newTotalPay = (Math.round(self.totalPay * 100) - Math.round(self.recommendedRelief * 100))/100;
                if (self.newTotalPay < 0) {
                    self.newTotalPay = 0;
                }

                //活动减免
                if (self.discount) {
                    self.newTotalPay = (Math.round(self.newTotalPay * 100) - Math.round(self.discount * 100)) / 100;//减免后的金额
                    if (self.newTotalPay < 0) {
                        self.newTotalPay = 0;
                    }
                }

                self.recommendId = data.data.recommendId;
                self.recommendPhone = data.data.recommendPhone;
                self.recommendedName = data.data.recommendName;
                
                
            },function(){
                
            })
        },
        
        //下拉框更改时,变更绑定数据
        selectDriveType:function (t) {
//          if(!t){
//              return;
//          }
            var self=this;
            console.log(JSON.stringify(t))
            self.totalPay = t.expense;
            self.newTotalPay = t.expense;
            //self.driveType = t;
            //self.driveType = t.vehicleKind +"( "+t.description+")";
            if (self.hasRecommend) {
                self.newTotalPay = (Math.round(self.totalPay * 100) - Math.round(recommendedRelief * 100))/100;//减免后的金额
                if (self.newTotalPay < 0) {
                    self.newTotalPay = 0;
                }
            }else{
                 self.newTotalPay = self.totalPay;
            }

            //活动减免
            if (self.discount) {
                self.newTotalPay = (Math.round(self.newTotalPay * 100) - Math.round(self.discount * 100)) / 100;//减免后的金额
                if (self.newTotalPay < 0) {
                    self.newTotalPay = 0;
                }
            }

            self.getDescriptions = t.descriptions;
        },
        //弹出免责条款
        agree_select:function () {
            var content = '云支付作为网络交易平台,除云支付特定自行销售的产品外,您从云支付上获取的任何产品信息均为云支付用户(包括个人用户及商户)自行发布,云支付对其真实性、合法性及有效性不做任何形式的保证,您应自行判断并承担风险。所有责任由该信息发布者承担。';
            MessageBox.alert(content, '报名协议');
        },
        //点击勾选免责条款
        selectInput:function () {
            var self=this;
            if (self.checkboxAgree2 == 1) {
                self.checkboxAgree2 = 0;
            } else if (self.checkboxAgree2 == 0) {
                self.checkboxAgree2 = 1;
            }
        },
        //去支付按钮事件
        goPay:function () {
            var self=this;
//          debugger;
            if(self.toGopay == 0){
                return;
            }
            if (self.checkboxAgree2 == 1) {
                Toast({
                    message:commonToast["indexLoading"],
                    position: 'middle',
                    duration:self.hideTime
                });
                //接口未通,暂时屏蔽去支付按钮的方法(调测微信支付时放开)
                var pay_params = {
                    studentId: self.valueForWeChats.studentId,
                    paymentType: '2',
                    stu_account: self.valueForWeChats.phoneNo,
                    cityClassId: self.cityClassId,
                    driveType: self.driveType,
                    totalPay: self.newTotalPay,
                    recommendId: self.recommendId,
                    recommendAccount: self.recommendPhone,
                    openid: tool.getUrlRequestParam().openid,
                };
                self.getBackDate(self.settleAccounts, pay_params);
                //接口未通,暂时屏蔽去支付按钮的方法(调测微信支付时放开)
            } else {
                Toast({
                    message:commonToast["payAgree"],
                    position: 'middle',
                    duration:self.hideTime
                });
            }
        },
        //获取返回的订单信息并通过native调用支付工具
        getBackDate:function(url, params) {
            var self=this;
            httpService.get(url, params).then(function (data) {
                if (data.code == commonToast["MSG_FAILED"]) {
                    //初始化支付控件失败
                    Toast({
                        message: commonToast["payFailInit"],
                        position: 'middle',
                        duration:self.hideTime
                    });
                } else {
                    if(data.flag==2){
                        //您已支付成功,不要重复支付
                        Toast({
                            message: commonToast["payRepeat"],
                            position: 'middle',
                            duration:self.hideTime
                        });
                        return;
                    }
                    self.appId = data.appid;
                    self.timeStamp = data.timeStamp;
                    self.nonceStr = data.nonceStr;
                    self.packageValue = data.package;
                    self.paySign = data.sign;
                    WeixinJSBridge.invoke('getBrandWCPayRequest', {
                        "appId": appId,
                        "timeStamp": timeStamp,
                        "nonceStr": nonceStr,
                        "package": packageValue,
                        "signType": "MD5",
                        "paySign": paySign
                    }, function (res) {
                        //                      alert(res.err_msg);
                        //                      alert(res.err_code + res.err_desc + res.err_msg);
                        if (res.err_msg == "get_brand_wcpay_request:ok") {
                            MessageBox.alert(commonToast["paySuccess"]).then(action => {
                                //支付成功 回到首页
                                var url = "indexTab/index",
                                    params={
                                        openid:tool.getUrlRequestParam().openid,
                                    };
                                tool.goUrl(url,params);
                            });
                        } else if (res.err_msg == "get_brand_wcpay_request:cancel") {
                            //取消支付!
                            Toast({
                                message:commonToast["payCancel"],
                                position: 'middle',
                                duration:self.hideTime
                            });
                        } else {
                            //alert("支付失败");
                            //支付失败!
                            Toast({
                                message:commonToast["payFail"],
                                position: 'middle',
                                duration:self.hideTime
                            });
                        }
                    })
                }
            },function(){
                
            });
            $http({
                method: "get",
                url: url,
                params: params
            }).success(function (data) {
                $ionicLoading.hide();
                if (data.code == 0) {
                    $ionicLoading.show({
                        template: "初始化支付控件失败..."
                    });
                    $timeout(function () {
                        $ionicLoading.hide()
                    }, 3000);
                } else {
                    if(data.flag==2){
                        $ionicLoading.show({
                            template: "您已支付成功,不要重复支付"
                        });
                        $timeout(function () {
                            $ionicLoading.hide()
                        }, 3000);
                        return;
                    }
                    appId = data.appid;
                    timeStamp = data.timeStamp;
                    nonceStr = data.nonceStr;
                    packageValue = data.package;
                    paySign = data.sign;
                    WeixinJSBridge.invoke('getBrandWCPayRequest', {
                        "appId": appId,
                        "timeStamp": timeStamp,
                        "nonceStr": nonceStr,
                        "package": packageValue,
                        "signType": "MD5",
                        "paySign": paySign
                    }, function (res) {
                        //                      alert(res.err_msg);
                        //                      alert(res.err_code + res.err_desc + res.err_msg);
                        if (res.err_msg == "get_brand_wcpay_request:ok") {
                            defineAlert("支付成功!", function () {
                                //微信支付成功后,做业务处理
                                var url = "indexTab/index",
                                    params={
                                        openid:tool.getUrlRequestParam().openid,
                                    };
                                tool.goUrl(url,params);
                                //var url = valueForWeChat.html5BaseUrl + "/stu/stu_index.html?openid="+openid +"#/index";
                            },true);

                        } else if (res.err_msg == "get_brand_wcpay_request:cancel") {
                            defineAlert("取消支付!", function () {
                              
                            });
                        } else {
                            //alert("支付失败");
                            defineAlert("支付失败", function () {
                                
                            });
                        }
                    })
                }
            }).error(function () {
                $ionicLoading.show({
                    template: "初始化支付控件失败..."
                });
                $timeout(function () {
                    $ionicLoading.hide()
                }, 3000);
            });
        },
        //获取优惠
//      getRecommend:function () {
//          var alertStr = '<div id="J_alert" class="grayBackground" style="z-index:10">' + '<div class="dialogCover"></div>' + '<div class="dialog-div">' + '<div class="dialog">' + '<div class="phoneTest">请输入推荐人手机号码</div>' + '<div class="inputPhone"><input class="inputValue" type="text" maxlength="11"></div>' + '<div class="btn-bar">' + '<div class="btn-bar-inner">' + '<div class="btn-alert-single confirmButton-blue-border" id="J_btn_alert_ok">确定</div>' + '</div></div></div></div></div>';
//          if ($("#J_alert").length) {
//              $("#J_alert").remove();
//          }
//          $("body").append(alertStr);
//          dialog_re_adapt(100);
//          dialog_re_adapt(200);
//          dialog_re_adapt_but(100);
//          $("#J_btn_alert_ok").click(function () {
//              //点击确定时获取输入框的值并传给后台
//              phoneNum = $(".inputValue").val();
//              getCount = {
//                  recommendPhoneNo: phoneNum,
//                  recommendedPhoneNo: valueFromNativeAll.phoneNo,
//                  type_wc: 2,
//                  openid: openid,
//                  needBind: 1
//              };
//              getcode_url = valueFromNativeAll.serverBaseUrl + '/mw/recommendpolite/reliefAmount.do';
//              var real = checkPhone();
//              if (!real) {
//                /*  defineAlert2('手机号码格式不正确哦!请您重新输入', function () {
//                      self.getRecommend();
//                  });*/
//                  $ionicLoading.show({
//                      template: '手机号码格式不正确哦!请您重新输入'
//                  });
//                  setTimeout(function () {
//                      $ionicLoading.hide();
//                  }, autoHideTime);
//              } else {
//                 // $("#J_alert").hide();
//                  $("#J_alert").remove();
//                  getBackRecommendMsg(getcode_url, getCount);
//              }
//              // $("#J_alert").hide();
//          });
//          $(".dialogCover").click(function () {
//              //$("#J_alert").hide();
//              $("#J_alert").remove();
//          });
//
//          function dialog_re_adapt(e) {
//              !e ? e = 0 : "";
//              setTimeout(function () {
//                  var e = $(window).height(),
//                      t = $(".dialog-div").height();
//                  $(".dialog-div").css("top", (e - t) / 2 + "px")
//              }, e)
//          }
//
//          function dialog_re_adapt_but(e) {
//              !e ? e = 0 : "";
//              setTimeout(function () {
//                  var e = $(window).height(),
//                      t = $(".goPaybuttom_vip").height();
//                  $(".goPaybuttom_vip").css("top", (e - t)+ "px");
//                  $(".dialogCover").css("height", e+ "px");
//              }, e)
//          }
//
//          return false;
//      },
        
    },
}
</script>

 

 

 

3.实时监听input的value值,vue中虽然有和angular双向数据绑定ng-model一样功能的指令v-model,但是并不能实时监听,而@change也不能实时对input的value值进行实时运行,后来找到一个watch方法能实时监听,并实时响应,api路径:https://vuefe.cn/v2/api/#vm-watch

代码如下:

<template>
    <div id="baiduSearchMain">
        <div id="r-result" class="pr">
            <div class="pa imputWrap">
                <input type="text" id="suggestId"  v-model="inputAdd" size="20"
                       value="" placeholder="请输入关键字" class="searchIpt"/>
                <img src="../assets/icon_search.png"/>
            </div>
        </div>
        <div class="currentAddress">
            <div class="AddressT">当前位置</div>
            <div class="row">
                <div class="currentAddressD" @click="backToPrePage()">{{currentAddress}}</div>
                <div class="currentAddressGdp" @click="resetLocation()"><img src="../assets/icon_locationg.png" alt="重新定位"/>
                    <div id="allmap" style="display:none;"></div>
                </div>
            </div>
        </div>
        <div class="fujinAddress">
            <div class="AddressT">附近地址</div>
            <div class="AddressC">
                <div class="fujinAddressDetail" @click="getAddress(index)" v-for="(addressDes,index) in address">
                    <p><img src="../assets/icon_location.png"/><span>{{addressDes.title}}</span></p>
                </div>
            </div>
        </div>
    </div>
</template>
<script>
import Vue from 'vue';
import tool from '../common/tools';
import httpService from '../common/httpService';
import commonToast from '../common/commonToast';
import ubderscore from '../common/underscore-min.js';
import {Toast ,Loadmore} from 'mint-ui';
import MessageBox from 'mint-ui/lib/message-box';

import 'mint-ui/lib/loadmore/style.css';
import 'mint-ui/lib/toast/style.css';
import 'mint-ui/lib/message-box/style.css';
import '../css/baiduSearch.css';

Vue.component(Loadmore.name, Loadmore);
Vue.component(MessageBox.name, MessageBox);
export default {
    data() {
        return {
            currentAddress:tool.Request("currentAddress"),
            gps:tool.Request('gps'),
            ac:null,
            timer:null,
            currentPoint:null,
            map:null,
            address:[],//地址列表
            hideTime:2000,//隐藏弱提示时间
            inputAdd:""
//          time:0,
        }
    },
    watch:{
        inputAdd: function (curVal,oldVal){
//      console.log(curVal,oldVal);
            if(this.ac){
                this.ac.search(this.inputAdd);
            }
    }
    },
    mounted: function() {
        this.baiduSearchMain();
    },
    methods:{
        //主函数
        baiduSearchMain:function(){
            var self=this;
            var arr = this.gps.split(",");
            var currentPoint = new BMap.Point(parseFloat(arr[1]), parseFloat(arr[0]));
            this.map = new BMap.Map('allmap');
            this.map.centerAndZoom(currentPoint, 16);
            
             this.ac = new BMap.LocalSearch(this.map, ( //建立一个自动完成的对象
                {
                    "onSearchComplete": function () {
                        var result = self.ac.getResults();
                        if (result) {

                            self.address = result.xr;

                            self.address = ubderscore.uniq(self.address, function (item) {
                                return item.title;
                            });
                            console.log(self.address);
                        }
                    },
                    "pageCapacity": 20
                }));
            this.ac.search(this.currentAddress);
        },
        //附近地址
        reSearchLocation:function (e) {
        
            console.log(e.target.value)
            this.value = e.target.value;
            this.ac.search(e.target.value);
        },
        //返回上一页
        backToPrePage:function () {
            window.history.back();
        },
        getAddress:function (index) {
            window.history.back();
//          var stop=setInterval(function(){

//              this.time++;
//              if(this.time>4){
//                  this.time=0;
//                  window.history.back()
//              }
//              console.log(this.time)
//          }, 100);
            localStorage.setItem('location', JSON.stringify({
                'address': this.address[index].title,
                'gps': this.address[index].point.lat + ',' + this.address[index].point.lng
            }));
            //setTimeout(window.history.back(),3000);
        },
        //重新定位
        resetLocation:function () {
            var self=this;
            Toast({
                message: commonToast["baiduSeaLocation"],
                position: 'middle',
                duration:self.hideTime
            });
            var geolocation = new BMap.Geolocation();
            geolocation.getCurrentPosition(function(r){
                if(this.getStatus() == BMAP_STATUS_SUCCESS){
                    var mk = new BMap.Marker(r.point);
                    var latitude = r.point.lat;
                    var longitude = r.point.lng;
                    this.gps = latitude + "," + longitude;
                    
                    var pt = r.point;
                    console.log('您的位置:'+r.point.lng+','+r.point.lat);
                    var geocoder = new BMap.Geocoder();
                    var currentPoint = r.point;
                    geocoder.getLocation(currentPoint, function (result) {
                        self.currentAddress = result.address;
                        localStorage.setItem('location', JSON.stringify({
                            'address':result.address,
                            'gps': self.gps
                        }));
                        self.ac.search(self.currentAddress);
                    });
                }else {
                    this.currentAddress = "南京市";
                    localStorage.setItem('location', JSON.stringify({
                        'address': "南京市",
                        'gps': "32.0572355,118.77807441"
                    }));
                }        
            },{enableHighAccuracy: true})
            
        },
    }
}
</script>

 

posted @ 2017-01-20 11:03  lxzltg  阅读(4733)  评论(0编辑  收藏  举报