rootscopeをグローバルとして使用しようとしているので、コントローラで同じものを取り出すことができます。window.onnotification内でrootScopeを使用できません
app.js:
angular.module('app', ['ionic', 'app.controllers', 'app.routes', 'app.services', 'app.directives'])
.run(function($ionicPlatform,$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 && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
cordova.plugins.Keyboard.disableScroll(true);
}
if (window.StatusBar) {
// org.apache.cordova.statusbar required
StatusBar.styleDefault();
}
pushNotification = window.plugins.pushNotification;
pushNotification.register(
onNotification,
errorHandler,
{
'badge': 'true',
'sound': 'true',
'alert': 'true',
'ecb': 'onNotification',
'senderID': '999999999999',
}
);
});
})
window.onNotification = function(e){
switch(e.event){
case 'registered':
if(e.regid.length > 0){
var device_token = e.regid;
alert('registered :'+device_token);
$rootScope.devicetoken = device_token;
}
break;
case 'message':
alert('msg received: ' + e.message);
break;
case 'error':
alert('error occured');
break;
}
};
window.errorHandler = function(error){
alert('an error occured');
}
私はdevice_tokenを取得し、アラートに取得しています。 rootscopeの中でコントローラに使用することはありません。
Controller.js:機能を進んで警告しながら、
angular.module('app.controllers', [])
.controller('onWalletWelcomesCtrl', function($scope, $ionicModal,User,$ionicLoading,$rootScope) {
$ionicModal.fromTemplateUrl('signup-modal.html', {
id: '1', // We need to use and ID to identify the modal that is firing the event!
scope: $scope,
backdropClickToClose: false,
animation: 'slide-in-up'
}).then(function(modal) {
$scope.oModal1 = modal;
});
$scope.proceed = function(){
alert($rootScope.devicetoken);
$ionicLoading.show({template: '<ion-spinner icon="android"></ion-spinner>'});
}
})
私は未定義取得しています。 window.onNotificationでのrootScopeの使用方法私の主な目的はdevicetokenをコントローラに渡すことです。変数を共有することをお勧めします。
angular.module('app', ['ionic', 'app.controllers', 'app.routes', 'app.services', 'app.directives'])
.run(function($ionicPlatform,$rootScope) {
$ionicPlatform.ready(function() {
if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
cordova.plugins.Keyboard.disableScroll(true);
}
if (window.StatusBar) {
// org.apache.cordova.statusbar required
StatusBar.styleDefault();
}
pushNotification = window.plugins.pushNotification;
pushNotification.register(
onNotification,
errorHandler,
{
'badge': 'true',
'sound': 'true',
'alert': 'true',
'ecb': 'onNotification',
'senderID': '9999999999',
}
);
});
})
window.onNotification = function(e){
switch(e.event){
case 'registered':
if(e.regid.length > 0){
var device_token = e.regid;
alert('registered :'+device_token);
$rootScope.devicetoken = "hi";
$scope.$apply();
}
break;
case 'message':
alert('msg received: ' + e.message);
break;
case 'error':
alert('error occured');
break;
}
};
window.errorHandler = function(error){
alert('an error occured');
}
コントローラーで警告中にまだ定義されていません。
$ rootScope.devicetoken = ''を定義してください。 – mtamma