Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 积分非角码?_Javascript_Angularjs - Fatal编程技术网

Javascript 积分非角码?

Javascript 积分非角码?,javascript,angularjs,Javascript,Angularjs,我正在开发一个Cordova/PhoneGap应用程序,我正在使用$cordovaPush插件(包装为PushPlugin)来处理推送通知 代码如下所示: var androidConfig = { "senderID" : "mysenderID", "ecb" : "onNotification" } $cordovaPush.regis

我正在开发一个Cordova/PhoneGap应用程序,我正在使用$cordovaPush插件(包装为PushPlugin)来处理推送通知

代码如下所示:

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
    ,而不是
    window
    。这是一个很好的习惯,因为它将帮助您实现测试性。由于Cordova的内部结构,您可能实际上需要使用
    窗口
    ,但我对此表示怀疑
  • 完成所有工作的函数都隐藏在
    $scope.apply
    如果忘记执行此操作,则更新的任何变量都不会反映在视图中,直到摘要循环再次运行(如果有)
  • 虽然我将我的示例放在控制器中,但您可以将您的示例放在处理程序中。如果它是一个角度处理程序(例如,
    ng click
    ),您可能会认为,因为
    ng click
    有一个隐式$apply包装回调,所以您的
    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...
       });
     };
   });