美文网首页
ionic1 v1 开发小经验 小方法

ionic1 v1 开发小经验 小方法

作者: ynwshy | 来源:发表于2017-12-08 22:39 被阅读0次

    基于ionic1.7.16 & cordova 6.3.1

    对应的ionic cli版本官方参考文档可以自己查找到
    在npm安装的目录下ionic/README.md
    C:\Users\Administrator\AppData\Roaming\npm\node_modules\ionic\README.md


    发布签名版本

    • 1.生成未签名版的apk -> android-release-unsigned.apk
    ionic build --release android
    
    • 2.生成签名文件 myapp.keystore
    cd platforms\android\build\outputs\apk
    
    keytool -genkey -v -keystore myapp.keystore -alias myapp.keystore -keyalg RSA -validity 20000
    
    填写信息即可
    
    • 3.使用签名文件给未签名的apk签名
      myapp.keystore&生成未签名版的apk -> 生成签名的api
    jarsigner -verbose -keystore myapp.keystore -signedjar android-release.apk android-release-unsigned.apk myapp.keystore
    
    获取MD5签名

    查看签名的MD5 (解压android-release.apk 取出META-INF 下的.RSA文件)

    keytool -printcert -file MYAPP.RSA
    

    证书指纹:
    MD5: 6B:2B:83:81:18:E3:......
    md5 小写 6b2b838118e3.....(秘钥需要转成小写去":",做微信cordova插件功能时需要配置)


    自定义ionic默认css样式

    安装编译scss所需依赖
    npm install
    
    ionic会添加gulp-sass等gulp插件
    ionic setup sass
    
    启动的时候会增加gulp任务,sass和watch
    ionic serve
    

    修改lib\ionic\scss_variables.scss
    $calm: #11c1f3 !default;
    再修改myapp/scss/ionic.app.scss
    $calm: #11c1f3 !default;
    ----- save ok------
    sass代码构建过程 参考作者:大猫Calvin

    顺便扩展gulp任务 自定义style.scss

    gulp.task('sass', function(done) {
    // 再添加一个style.scss的配置
    });

      gulp.src('./scss/style.scss')
        .pipe(sass())
        .on('error', sass.logError)
        .pipe(gulp.dest('./www/css/'))
        .pipe(cleanCss({
          keepSpecialComments: 0
        }))
        .pipe(rename({ extname: '.min.css' }))
        .pipe(gulp.dest('./www/css/'))
        .on('end', done);
    

    自定义tabs 图标

    以css background-image的方式实现

    <ion-tabs class="tabs-icon-top tabs-color-active-calm">
    
      <ion-tab title="首页" icon-off="cc_tab_pic cc_tab_off_1" icon-on="cc_tab_pic cc_tab_on_1" href="#/tab/home" style="">
        <ion-nav-view name="tab-home"></ion-nav-view>
      </ion-tab>
    
      <ion-tab title="向导" icon-off="cc_tab_pic cc_tab_off_2" icon-on="cc_tab_pic cc_tab_on_2" href="#/tab/guide">
        <ion-nav-view name="tab-guide"></ion-nav-view>
      </ion-tab>
    
      <ion-tab title="我的" icon-off="cc_tab_pic cc_tab_off_3" icon-on="cc_tab_pic cc_tab_on_3" href="#/tab/user">
        <ion-nav-view name="tab-user"></ion-nav-view>
      </ion-tab>
    
    </ion-tabs>
    
    // tabs
    .cc_tab_pic {
      background-size: 20px;
      background-repeat: no-repeat;
      background-position: center;
      &.cc_tab_off_1 {
        background-image: url(../img/tabs/1.png);
      }
      &.cc_tab_on_1 {
        background-image: url(../img/tabs/2.png);
      }
      &.cc_tab_off_2 {
        background-image: url(../img/tabs/3.png);
      }
      &.cc_tab_on_2 {
        background-image: url(../img/tabs/4.png);
      }
      &.cc_tab_off_3 {
        background-image: url(../img/tabs/5.png);
      }
      &.cc_tab_on_3 {
        background-image: url(../img/tabs/6.png);
      }
    }
    

    登陆的做法

    你要是愿意的话,可以在每个需要登录的页面中做未登录情况的处理,比如展示一些默认背景图片,登录提示等等,又由于ionic的路由会缓存曾经访问过的页面,所以当你登录成功后,需要去刷新这些被缓存的页面。可以使用如下代码
    javascript 代码效果预览

    1.每次进入页面前判断是否登录

    $scope.$on("$ionicView.beforeEnter",function(){//每次进入页面前判断是否登录
            //判断登录代码
        });
    

    监听页面进入事件,每次页面进入都判断当前是否已登录,来判断是否加载数据。或者用$ionicHistory.clearCache() 直接清除所有缓存。

    2.每次进入页面前判断是否登录

    最方便简单的方法,在.run 或者 .config 中监听state的变更事件,也就是在路由去加载每个页面之前就判断登录状态,来决定要不要加载该页面,还是跳转到登录页去。
    javascript 代码效果预览

    .run(function($ionicPlatform, $rootScope, $ionicHistory,$state) {
        var needLoginView = ["myclass","mycomment","myfavorite","myquestion","orderlist"];//需要登录的页面state
        $rootScope.$on('$stateChangeStart',function(event, toState, toParams, fromState, fromParams, options){ 
            if(needLoginView.indexOf(toState.name)>=0&&!$rootScope.isLogin){//判断当前是否登录
                $state.go("login");//跳转到登录页
                event.preventDefault(); //阻止默认事件,即原本页面的加载
            }
        })});
    

    这样只需要把所有需要登录的页面state名写入needLoginView 数组中,每次切换页面,就会自动判断是否要跳转到登录页面,并且登录页返回直接到当前页,减少很多麻烦。


    $ionicModal 向左css动画 & 返回关闭Modal

    官方的modal只有向上(slide-in-up)的动画
    所以自己添加一个向左的slide-in-left

    // ionic model ----增加slide-in-right 动画效果
    .slide-in-right {
        -webkit-transform: translateX(-100%);
        transform: translateX(100%);
    }
    .slide-in-right.ng-enter,.slide-in-right > .ng-enter {
        -webkit-transition: all cubic-bezier(0.1, 0.7, 0.1, 1) 400ms;
        transition: all cubic-bezier(0.1, 0.7, 0.1, 1) 400ms;
    }
    .slide-in-right.ng-enter-active,.slide-in-right > .ng-enter-active {
        -webkit-transform: translateX(0);
        transform: translateX(0);
    }
    .slide-in-right.ng-leave,.slide-in-right > .ng-leave {
        -webkit-transition: all ease-in-out 250ms;
        transition: all ease-in-out 250ms;
    }
    .slide-in-left {
        -webkit-transform: translateX(-100%);
        transform: translateX(100%);
    }
    .slide-in-left.ng-enter,.slide-in-left > .ng-enter {
        -webkit-transition: all cubic-bezier(0.1, 0.7, 0.1, 1) 400ms;
        transition: all cubic-bezier(0.1, 0.7, 0.1, 1) 400ms;
    }
    .slide-in-left.ng-enter-active,.slide-in-left > .ng-enter-active {
        -webkit-transform: translateX(0);
        transform: translateX(0);
    }
    .slide-in-left.ng-leave,.slide-in-left > .ng-leave {
        -webkit-transition: all ease-in-out 250ms;
        transition: all ease-in-out 250ms;
    }
    
    $ionicModal.fromTemplateUrl('my-modal.html', {
        scope: $scope,
        animation: 'slide-in-left'
      }).then(function(modal) {
        $scope.modal = modal;
      });
    

    如果用户进入Model页面后 点击了返回按钮 这是需要关闭Model

        //监听离开页面时关闭modal
        $scope.$on("$ionicParentView.beforeLeave", function() {
            console.info("yourPageCtrl--$ionicView.beforeLeave ");
            $scope.modal.hide();
        });
    

    $http 请求格式问题

    如果服务器拿不到请求的数据 应该是格式不对
    配置$http参数,以表单形式 提交数据

    var app = angular.module('myApp');
    app.config(function ($httpProvider) {
        // 配置$http请求
        // 以表单形式 提交数据
        $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
        $httpProvider.defaults.transformRequest = function(data) {
          if (data === undefined) return data;
          return $.param(data);
        };
    });
    

    阻止事件冒泡

    元素的父元素也有点击事件 点击子元素后子元素事件执行完父元素事件也执行了

    <div ng-click="gohome()" >
        <button ng-click="myalert('gg');$event.stopPropagation();">呵呵</button>
    </div>
    

    ionic使用iframe时在iOS上无法显示网页问题处理

    近期在ionic项目中使用了iframe标签使用src属性展示一个网页,在Android设备上运行完全正常.
    但是在iOS模拟器上去运行时却不显示网页.经查阅资料发现以下处理方法

    • 在ionic项目根目录下,打开config.xml文件,在<access origin="" />后添加<allow-navigation href="" />即可
    <allow-navigation href="*" />
    

    ionic禁止手机自动旋转下横屏

    1.安装cordova插件
    ionic plugin add cordova-plugin-screen-orientation
    
    2.添加屏幕配置(Config.xml文件)
    <preference name="orientation" value="portrait" />
    
    • orientation设置可以让你锁定应用程序屏幕方向以阻止屏幕自动翻转。可选的值有:default,landscape(横屏),portrait(竖屏)。

    相关文章

      网友评论

          本文标题:ionic1 v1 开发小经验 小方法

          本文链接:https://www.haomeiwen.com/subject/vepyixtx.html