Inc*_*tor 9 angularjs cordova ionic-framework cordova-plugins ionic
我正在研究Ionic Framework,并面临使用Apache Cordova Network API检测Android App中的互联网连接的问题.我已经参考了这个教程并创建了一个演示项目,它工作正常.
我按照以下步骤操作.[来自教程]
ionic start testApp sidemenu
ionic platform add android
打开 testApp/www/js/app.js
复制粘贴此代码
if(window.Connection) {
if(navigator.connection.type == Connection.NONE) {
alert('There is no internet connection available');
}else{
alert(navigator.connection.type);
}
}else{
alert('Cannot find Window.Connection');
}
Run Code Online (Sandbox Code Playgroud)安装Cordova插件 cordova plugin add org.apache.cordova.network-information
建立 ionic build android
跑 ionic run android
这很好用
问题
www来自mainproject于testApp并执行步骤6和7我收到警报 Cannot find Window.Connection
复制粘贴后app.js看起来像这样
.run(function($ionicPlatform) {
$ionicPlatform.ready(function() {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if(window.StatusBar) {
// org.apache.cordova.statusbar required
StatusBar.styleDefault();
}
// check internet connection
//alert(window.Connection);
alert('Hi')
try {
alert('Naviagtor says'+navigator.connection.type);
}
catch(err) {
alert( 'Error '+ err.message)
//here i get 'Error cannot read property type of undefined'
}
if(window.Connection) {
if(navigator.connection.type == Connection.NONE) {
alert('There is no internet connection available');
}else{
alert(navigator.connection.type);
}
}else{
alert('Cannot find Window.Connection');
}
});
})
Run Code Online (Sandbox Code Playgroud)
我复制粘贴一刻我app.js并controllers.js到testApp/www/js目录整个事情炸毁.
任何有关调试的帮助都非常感谢.
谢谢,
注意
我有cordova.js在index.html.
我已经重新安装platforms并plugins复制粘贴后也是如此.
小智 21
我使用ngcordova解决了类似的问题.它为你提供了一个实现promises的插件的角度包装器.
当您尝试调用它们时,Cordova插件通常没有准备好,使用promise接口可以避免出现未定义的错误.
我偷了ngcordova页面的网络插件的例子在这里.
module.controller('MyCtrl', function($scope, $rootScope, $cordovaNetwork) {
document.addEventListener("deviceready", function () {
var type = $cordovaNetwork.getNetwork()
var isOnline = $cordovaNetwork.isOnline()
var isOffline = $cordovaNetwork.isOffline()
// listen for Online event
$rootScope.$on('networkOffline', function(event, networkState){
var onlineState = networkState;
})
// listen for Offline event
$rootScope.$on('networkOffline', function(event, networkState){
var offlineState = networkState;
})
}, false);
});
Run Code Online (Sandbox Code Playgroud)
对于任何新访问并且让Armed10的答案有效的问题,你可能想查看我写的帖子,逐步告诉你应该放置一些代码的位置和原因(如果你刚开始的话可能会有用)与Ionic):http://www.nikola-breznjak.com/blog/codeproject/check-network-information-change-with-ionic-famework/.
另外,我在Github上免费提供了示例代码:https://github.com/Hitman666/IonicNetworkInfo.
编辑:根据StackOverflow的规则,我也在这里添加帖子内容:
一步一步如何自己做这件事
通过执行以下操作启动新的Ionic项目:
ionic start IonicNetworkInfo blank
Run Code Online (Sandbox Code Playgroud)
然后,将目录更改为新创建的IonicNetworkInfo:
cd IonicNetworkInfo
Run Code Online (Sandbox Code Playgroud)
使用Bower安装ngCordova:
bower install ngCordova
Run Code Online (Sandbox Code Playgroud)
如果您有可能没有安装bower,可以使用npm安装它:
npm install bower -g
Run Code Online (Sandbox Code Playgroud)
在您喜欢的编辑器中打开www/index.html文件,并添加对ngCordova的引用(就在cordova.js脚本上方):
<!-- This is what you should add, the cordova below you'll already have -->
<script src="lib/ngCordova/dist/ng-cordova.min.js"></script>
<!-- cordova script (this will be a 404 during development) -->
<script src="cordova.js"></script>
Run Code Online (Sandbox Code Playgroud)
通过在终端/命令提示符中执行以下命令来安装ngCordova网络插件(您应该从应用程序的根目录执行此操作;因此,在我们的示例中为IonicNetworkInfo目录):
cordova plugin add org.apache.cordova.network-information
Run Code Online (Sandbox Code Playgroud)
要检查是否已成功安装插件,可以运行以下命令(从根目录 - 我将不再重复此操作;当我说你应该从终端/命令提示符运行一些命令时,在这种情况下,表示从应用程序的根目录):
cordova plugin list
Run Code Online (Sandbox Code Playgroud)
您应该看到以下输出:
> cordova plugin list
com.ionic.keyboard 1.0.4 "Keyboard"
org.apache.cordova.network-information 0.2.15 "Network Information"
Run Code Online (Sandbox Code Playgroud)
打开www/js/app.js文件并将ngCordova添加到依赖项列表中,这样第一行基本上如下所示:
angular.module('starter', ['ionic', 'ngCordova'])
Run Code Online (Sandbox Code Playgroud)
在名为MyCtrl的www/js/app.js文件中创建一个新控制器,其中包含以下内容:
.controller('MyCtrl', function($scope, $cordovaNetwork, $rootScope) {
document.addEventListener("deviceready", function () {
$scope.network = $cordovaNetwork.getNetwork();
$scope.isOnline = $cordovaNetwork.isOnline();
$scope.$apply();
// listen for Online event
$rootScope.$on('$cordovaNetwork:online', function(event, networkState){
$scope.isOnline = true;
$scope.network = $cordovaNetwork.getNetwork();
$scope.$apply();
})
// listen for Offline event
$rootScope.$on('$cordovaNetwork:offline', function(event, networkState){
console.log("got offline");
$scope.isOnline = false;
$scope.network = $cordovaNetwork.getNetwork();
$scope.$apply();
})
}, false);
})
Run Code Online (Sandbox Code Playgroud)
在此控制器中,您可以在deviceready事件上附加事件侦听器(因为可能是在运行此代码时设备尚未初始化)并且您获得了以下网络信息:
$cordovaNetwork.getNetwork();
Run Code Online (Sandbox Code Playgroud)
有关您连接到互联网的天气的信息可通过以下行获得:
$scope.isOnline = $cordovaNetwork.isOnline();
Run Code Online (Sandbox Code Playgroud)
然后,您注册两个事件$ cordovaNetwork:online和$ cordovaNetwork:online,当设备联机/离线时触发.在其中,您只需更新$ scope变量().仅供参考,www/js/app.js文件的全部内容应为:
// Ionic Starter App
// angular.module is a global place for creating, registering and retrieving Angular modules
// 'starter' is the name of this angular module example (also set in a <body> attribute in index.html)
// the 2nd parameter is an array of 'requires'
angular.module('starter', ['ionic', 'ngCordova'])
.run(function($ionicPlatform, $cordovaNetwork, $rootScope) {
$ionicPlatform.ready(function() {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if(window.StatusBar) {
StatusBar.styleDefault();
}
});
})
.controller('MyCtrl', function($scope, $cordovaNetwork, $rootScope) {
document.addEventListener("deviceready", function () {
$scope.network = $cordovaNetwork.getNetwork();
$scope.isOnline = $cordovaNetwork.isOnline();
$scope.$apply();
// listen for Online event
$rootScope.$on('$cordovaNetwork:online', function(event, networkState){
$scope.isOnline = true;
$scope.network = $cordovaNetwork.getNetwork();
$scope.$apply();
})
// listen for Offline event
$rootScope.$on('$cordovaNetwork:offline', function(event, networkState){
console.log("got offline");
$scope.isOnline = false;
$scope.network = $cordovaNetwork.getNetwork();
$scope.$apply();
})
}, false);
});
Run Code Online (Sandbox Code Playgroud)
在index.html文件中,在ion-content标签内部粘贴以下内容:
<div class="card">
<div class="item item-text-wrap">
<h1>Network: {{network}}</h1>
</div>
</div>
<div class="card">
<div class="item item-text-wrap">
<ion-toggle ng-model="isOnline" ng-checked="item.checked">
<h1 ng-show="isOnline">I'm online</h1>
<h1 ng-show="! isOnline">I'm offline</h1>
</ion-toggle>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
基本上我们在这里做的是显示网络变量的内容(通过控制器附加到$ scope).此外,通过使用离子切换组件,我们显示"我在线"/"我离线"通知.
仅供参考,整个index.html文件的内容应如下所示:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title></title>
<link href="lib/ionic/css/ionic.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
<!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
<link href="css/ionic.app.css" rel="stylesheet">
-->
<!-- ionic/angularjs js -->
<script src="lib/ionic/js/ionic.bundle.js"></script>
<script src="lib/ngCordova/dist/ng-cordova.min.js"></script>
<!-- cordova script (this will be a 404 during development) -->
<script src="cordova.js"></script>
<!-- your app's js -->
<script src="js/app.js"></script>
</head>
<body ng-app="starter" ng-controller="MyCtrl">
<ion-pane>
<ion-header-bar class="bar-stable">
<h1 class="title">Ionic Blank Starter</h1>
</ion-header-bar>
<ion-content padding="true">
<div class="card">
<div class="item item-text-wrap">
<h1>Network: {{network}}</h1>
</div>
</div>
<div class="card">
<div class="item item-text-wrap">
<ion-toggle ng-model="isOnline" ng-checked="item.checked">
<h1 ng-show="isOnline">I'm online</h1>
<h1 ng-show="! isOnline">I'm offline</h1>
</ion-toggle>
</div>
</div>
</ion-content>
</ion-pane>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
为了测试此应用程序,您应该在您的设备上运行它(因为您无法在iOS模拟器中禁用网络).如果您将Android设备插入计算机(以及所有适当的SDK),则可以运行以下命令以使您的应用在Android设备上运行:
ionic build android && ionic run android
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37205 次 |
| 最近记录: |