1.一个页面不能同时多个collection-repeat 否则页面样式会出现不可预知的错误
2.
$ rootScope ,只在本次有效。关掉app 再打开,这个
$rootScope的变量 值为 undefind
3.playBeep()
自定义对话框,确定框,通知音,震动。
详细 API 说明:http://docs.phonegap.com/en/3.3.0/cordova_notification_notification.md.html#Notification
// 蜂鸣三次
function playBeep() {
navigator.notification.beep(3);
}
Android的特异情况:
- Androids会播放在“设置/音效及显示”面板中指定的默认“通知铃声”。
iPhone的特异情况:
- 忽略蜂鸣次数参数。
- iPhone没有本地的蜂鸣API。
- PhoneGap通过多媒体API播放音频文件来实现蜂鸣。
- 用户必须提供一个包含所需的蜂鸣声的文件。
- 此文件播放时长必须短于30秒,位于www/root,并且必须命名为beep.wav。
4. vibrate()
// 震动2.5秒
navigator.notification.vibrate(2500);
iPhone的特异情况:
- time:忽略时长参数,震动时长为预先设定值。
简单的范例:
navigator.notification.vibrate();
navigator.notification.vibrate(2500); // 2500被忽略掉
5.让app 在每次打开时检查更新;第一次安装时,引导页完毕后,请求首页数据后,再检查更新。
- 问题:第一次安装app 时,在引导页时就显示 更新框了。应该引导页完毕,加载首页数据时,才去服务器获取最新版本。
更新方法开始是放在app.js 的
$ionicPlatform.ready(function () {
//在设备初始化完成后隐藏Splash画面延迟
setTimeout(function() {
navigator.splashscreen.hide();
}, 1000);
//更新
checkUpdate();
}
解决方案:
*1. 因为加载引导页时,是判断缓存中的一个对象`window.localStorage['first']`。*
//shoppingcar
.state('tab.shoppingcart',{url: '/shoppingcart', nativeTransitions: null, cache: 'false',views:{'tab-shoppingcart': {templateUrl: "templates/tab-ShoppingCart.html", controller: 'ShoppingCartCtrl'} } })
.state('welcome', {
url: '/welcome',
abstract: true,
templateUrl: 'templates/welcome/welcome.html',
controller: 'GuidController'
})
.state('welcome.w_page', {
url: '/w_page',
views: {
'welcome': {
templateUrl: 'templates/welcome/w_page.html',
controller: 'GuidController'
}
}
})
// if none of the above states are matched, use this as the fallback如果以上匹配,使用回退
if (!window.localStorage['first'])
{
//跳到引导页
$urlRouterProvider.otherwise('/welcome/w_page');
$("#header_q").hide();
}
else
{
$urlRouterProvider.otherwise('/tab/home');
}
这是自己定义的window.localStorage['first']
因为在引导页GuidController
。如果滑动到最后一页,并且点击进入,会写一个对象first 并赋值1,并存到缓存。
.controller('GuidController', function ($scope,$ionicModal, $state, $timeout,$rootScope,$ionicSlideBoxDelegate) {
$scope.guideFlag = 'a';
//点击进入app 的方法
$scope.guideSure = function() {
$state.go('tab.home');
window.localStorage['first'] = '1';
};
$scope.Schange=function(index){
if(index==1)
{
$scope.guideFlag = 'a';
}
if(index==2)
{
//只有guideFlag 值为b 才显示 ‘进入app’的div
$scope.guideFlag = 'b';
//定义一个全局变量,用于在加载首页controller 判断,是否是第一次安装。
$rootScope.up='0';
console.info($scope.guideFlag);
}
};
})
所以,应该以缓存来判断是否显示更新窗。so。。 app.js是这么改的。
- 注意 :当
window.localStorage['first']
为undefind
时,!window.localStorage['first']
为true
if (!(!window.localStorage['first']))
{
checkUpdate();
}
如果已经加载过引导页,那么window.localStorage['first']
在缓存中的值为1 ,那么就检查更新。
1 =true
!1= false
!(!1)=true
*2.首页controller `HomeCtrl`*
HomeCtrl
document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady() {
if (!MJC.isOnline()) {
MJC.myNotice("暂无网络连接...");
//console.log('11111');
//console.log(MJC.getSignature(Storage.load('user')[0]['User_Code'], Storage.load('user')[0]['Users_Id']));
$scope.portalListData = Storage.load('pro-list');
//console.log($scope.portalListData);
if ($scope.portalListData == false) {
$scope.notice = false;
} else {
for (var i = 0; i < $scope.portalListData.advert.length; i++) {
$scope.portalListData.advert[i].ImgPath = 'img/ionic.png';
MJC.myNotice( $scope.portalListData.advert[i].ImgPath );
}
}
//下拉刷新,滑动图片失效的解决方案。
$ionicSlideBoxDelegate.$getByHandle('image-viewer').update();
} else {
//获取服务器数据保存
Activity_Product_List.getTopTopics();
//引导页时定义$rootScope.up=0,加载首页时,只显示一次更新,并且赋值,防止再切换到home时出现更新窗。
//退出再次打开app 时,$rootScope.up 被删除。值为undefind,也不执行checkUpdate();
//所以只有再次打开,才显示更新。
if($rootScope.up=='0')
{
$rootScope.up='1'
checkUpdate();
}
}
}
so 这样就解决了。让app 在每次打开时检查更新;第一次安装时,引导页完毕后,请求首页数据后,再检查更新。