关于使用angular1.X+ionic进行移动端开发的问题汇总

1.ion-item标签使用时如果padding设置为0,如果该页面数据全是动态获取,在某些机型上会显示空白.

解决方法:padding设为0.1px;

2.与原生端交互时,原生端是不能直接获取到controller里的方法的,需要在html页面上标明ng-controller

调用原生示例方法

function getRunContext() {//获取设备类型

    var type= "";

    var contextInfo= navigator.userAgent;

    if (contextInfo.indexOf('Android')> -1 || contextInfo.indexOf('Adr')> -1) {

        type= "Android";

    }else if (!!contextInfo.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) {

        type= "ios";

    }

    return type;

}

//  判断是否存在某个变量。适用于函数参数判断、一般数据

//  @arguments:  单个或多个参数

// 自定义函数

function isValidVarible(arguments) {

    try {

        for (var i= 0; i< arguments.length; i++) {

            if (typeof(arguments[i])== "undefined" || arguments[i].length== 0) {

                return false;

            }else {

                return true;

            }

        }

    }catch (e) {

        console.log(e);// 后期写入日志;

    }

    returnfalse;

}

// 调用原生通用接口

        this.callNativeFuntionInterface  = function (controllerName,callfunction, callbackFun, params) {

        //this.getRunContext();//此方法用于判断设备类型

            var isvalid = isValidVarible(callfunction, callbackFun, controllerName);

            if (isvalid) {

                var appElementString = "document.querySelector('[ng-controller={0}]')".format(controllerName);

                var callbackFunName = "angular.element({0}).scope()".format(appElementString) + ".{0}".format(callbackFun);

                var runContext = $rootScope.runContext;

                if (runContext == "Android") {

                    // AndroidFun.getDeviceInfoFromAndroid();

                    //获取angular element 来得到 方法

                    // var $mycon = angular.element(document.querySelector('[ng-controller="'+controllerName+'"]')).scope();

                    // //安卓回调方法

                    // window[callbackFun] = $mycon[callbackFun];

                    //回调方法名传到andriod原生

                    params.callback = callbackFunName;

                    var parms = params;

                    if(androidNativeFun != undefined){

                        androidNativeFun[callfunction](JSON.stringify(parms));

                    }

                } else if (runContext == "ios") {

                    var message = {

                        'method': callfunction,

                        'params': params,

                        'callback': callbackFunName

                    }

                    if(window.webkit != undefined){

                        window.webkit.messageHandlers.JSCallIOS.postMessage(message);

                    }

                }

            }

        }

3.设置当前时间前后N天,N月同理dd.setMonth(dd.getMonth()+ 1 + month);

function setDateDay(AddDayCount){//传入需要设置的天数 如+7,-7,输出格式为YYYY-MM-DD

        var dd= new Date();

        dd.setDate(dd.getDate()+AddDayCount);

        var y= dd.getFullYear();

        var m= (dd.getMonth()+1<10?"0"+(dd.getMonth()+1):(dd.getMonth()+1));

        var d= dd.getDate()<10?"0"+dd.getDate():dd.getDate();

        returny+"-"+m+"-"+d;

}

4.将YYYY-MM-DD转换为date格式

function StringToDate(s) {//将YYYY-MM-DD转换为Date格式

        var d= new Date();

        d.setYear(parseInt(s.substring(0,4),10));

        d.setMonth(parseInt(s.substring(5,7)- 1,10));

        d.setDate(parseInt(s.substring(8,10),10));

        // d.setHours(parseInt(s.substring(11, 13), 10));

        // d.setMinutes(parseInt(s.substring(14, 16), 10));

        // d.setSeconds(parseInt(s.substring(17, 19), 10));

        return d;

}

5.页面下载文件方法

function downFiles(blob, fileName) { //获取mimetypes  blob为文件流 fileName输入格式为(XXX.后缀名)

//filename,摘取常用部分

    let mimetypes= {

        'doc': 'application/msword',

        'bin': 'application/octet-stream',

        'exe': 'application/octet-stream',

        'db': 'application/octet-stream',

        'so': 'application/octet-stream',

        'dll': 'application/octet-stream',

        'pdf': 'application/pdf',

        'ai': 'application/postscript',

        'xls': 'application/vnd.ms-excel',

        'ppt': 'application/vnd.ms-powerpoint',

        'dir': 'application/x-director',

        'js': 'application/x-javascript',

        'swf': 'application/x-shockwave-flash',

        'xhtml': 'application/xhtml+xml',

        'xht': 'application/xhtml+xml',

        'zip': 'application/zip',

        'mid': 'audio/midi',

        'midi': 'audio/midi',

        'mp3': 'audio/mpeg',

        'rm': 'audio/x-pn-realaudio',

        'rpm': 'audio/x-pn-realaudio-plugin',

        'wav': 'audio/x-wav',

        'bmp': 'image/bmp',

        'gif': 'image/gif',

        'jpeg': 'image/jpeg',

        'jpg': 'image/jpeg',

        'png': 'image/png',

        'css': 'text/css',

        'html': 'text/html',

        'htm': 'text/html',

        'txt': 'text/plain',

        'xsl': 'text/xml',

        'xml': 'text/xml',

        'mpeg': 'video/mpeg',

        'mpg': 'video/mpeg',

        'avi': 'video/x-msvideo',

        'movie': 'video/x-sgi-movie'

    }

    let fileNameLast= fileName.substring(fileName.lastIndexOf("."), fileName.length)

    let filetypes= mimetypes[fileNameLast+ ""];

    var blob= new Blob([blob], {type: filetypes+ ""});

    if(window.navigator.msSaveOrOpenBlob) {//文件下载ie兼容

        navigator.msSaveBlob(blob, fileName);

    }else{

        var link = document.createElement('a');

        link.href= window.URL.createObjectURL(blob);    

        link.download= fileName;        

        link.click();

        window.URL.revokeObjectURL(link.href);

    }

}

6.格式化金额千分位

/*

* 格式化金额千分位

* 参数说明:

* number:要格式化的数字

* decimals:保留几位小数

* dec_point:小数点符号

* thousands_sep:千分位符号

* roundtag:舍入参数,默认 "ceil" 向上取,"floor"向下取,"round" 四舍五入

* */

function NumberFormatService() {

    return{

        numberFormat:function(number, decimals, dec_point, thousands_sep, roundtag) {

        number = (number + '').replace(/[^0-9+-Ee.]/g,'');

        roundtag= roundtag|| "ceil";//"ceil","floor","round"

        var n= !isFinite(+number)? 0 :+number,

            prec= !isFinite(+decimals)? 0 : Math.abs(decimals),

            sep= (typeof thousands_sep=== 'undefined')? ',': thousands_sep,

            dec= (typeof dec_point=== 'undefined')? '.': dec_point,

            s= '',

            toFixedFix= function(n, prec) {

                var k= Math.pow(10, prec);

                return '' + parseFloat(Math[roundtag](parseFloat((n* k).toFixed(prec* 2))).toFixed(prec* 2))/ k;

            };

    s= (prec? toFixedFix(n, prec) :'' + Math.round(n)).split('.');

    var re = /(-?\d+)(\d{3})/;

    while(re.test(s[0])) {

        s[0]= s[0].replace(re,"$1" + sep+ "$2");

    }

if((s[1]|| '').length< prec) {

s[1]= s[1]|| '';

s[1]+= new Array(prec- s[1].length+ 1).join('0');

}

return s.join(dec);

}

}

}


7.获取手机型号

/*

* 获取手机型号

* */

function getPhoneModel() {

return{

phoneModel:function() {

//判断数组中是否包含某字符串 

Array.prototype.contains = function(needle) {

for(iin this) {

if(this[i].indexOf(needle)> 0)

return i;

}

return -1;

}

var device_type= navigator.userAgent;

var md= new MobileDetect(device_type);

var os= md.os();

var model= "";

if(os== "iOS") {//ios系统的处理 

os= md.os()+ md.version("iPhone");

model= md.mobile();

}else if(os == "AndroidOS") { //Android系统的处理 

os= md.os()+ md.version("Android");

var sss= device_type.split(";");

var i= sss.contains("Build/");

if(i> -1) {

model= sss[i].substring(0, sss[i].indexOf("Build/"));

}

}

return model.trim();

}

}

}


8.邮箱正则

var reg =  /^[a-zA-Z0-9]+((([-_.][a-zA-Z0-9]+)|[a-zA-Z0-9])+)@([a-zA-Z0-9]+[-.])+[a-zA-Z0-9]{2,3}$/

reg.test(str);

你可能感兴趣的:(关于使用angular1.X+ionic进行移动端开发的问题汇总)