Javascript 积分非角码?
我正在开发一个Cordova/PhoneGap应用程序,我正在使用$cordovaPush插件(包装为PushPlugin)来处理推送通知 代码如下所示:Javascript 积分非角码?,javascript,angularjs,Javascript,Angularjs,我正在开发一个Cordova/PhoneGap应用程序,我正在使用$cordovaPush插件(包装为PushPlugin)来处理推送通知 代码如下所示: var androidConfig = { "senderID" : "mysenderID", "ecb" : "onNotification" } $cordovaPush.regis
var androidConfig = {
"senderID" : "mysenderID",
"ecb" : "onNotification"
}
$cordovaPush.register(androidConfig).then(function(result) {
console.log('Cordova Push Reg Success');
console.log(result);
}, function(error) {
console.log('Cordova push reg error');
console.log(error);
});
必须使用窗口范围定义“ecb”功能,即:
window.onNotification = function onNotification(e)...
此函数处理传入事件。很明显,我想在angular代码中处理传入事件-如何集成这两者,以便onNotification函数可以访问我的scope/rootScope变量?在主体中定义一种邮件控制器,并在该控制器内使用
$window
服务
HTML:
通常,您会将第三方库包装在
服务
或工厂
中,但本着回答特定场景的精神
这里有一种可能性:
angular.module('myApp').
controller('myController', function($scope, $window) {
$window.onNotification = function() {
$scope.apply(function() {
$scope.myVar = ...updates...
});
};
});
有几件事需要注意:
- 尝试使用
,而不是$window
。这是一个很好的习惯,因为它将帮助您实现测试性。由于Cordova的内部结构,您可能实际上需要使用window
,但我对此表示怀疑窗口
- 完成所有工作的函数都隐藏在
中如果忘记执行此操作,则更新的任何变量都不会反映在视图中,直到摘要循环再次运行(如果有)$scope.apply
- 虽然我将我的示例放在控制器中,但您可以将您的示例放在处理程序中。如果它是一个角度处理程序(例如,
),您可能会认为,因为ng click
有一个隐式$apply包装回调,所以您的ng click
函数当时没有被调用,所以您仍然需要执行onNotification
,如上所述$apply
- …说真的。。。别忘了申请。:-)当我调试人们的代码时,这是外部库无法工作的首要原因。我们都至少被这咬过一次
yourApp.controller("BaseController", ["$scope", "$window", function($scope, $window) {
$window.onNotification = function(e) {
// Use $scope or any Angular stuff
}
}]);
angular.module('myApp').
controller('myController', function($scope, $window) {
$window.onNotification = function() {
$scope.apply(function() {
$scope.myVar = ...updates...
});
};
});