集成非Angular代码?

时间:2015-04-23 16:20:28

标签: javascript angularjs

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

代码看起来像这样:

DefaultScheduler

" ecb"函数必须用窗口范围定义,即:

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);
                });

此函数处理传入事件。我显然喜欢处理我的角度代码中的传入事件 - 如何将两者集成在一起,以便我的onNotification函数可以访问我的scope / rootScope变量?

2 个答案:

答案 0 :(得分:1)

通常,您将第三方库包装在servicefactory中,但本着回答您特定情况的精神......

这是一种可能性:

angular.module('myApp').
   controller('myController', function($scope, $window) {
     $window.onNotification = function() {
       $scope.apply(function() {
         $scope.myVar = ...updates...
       });
     };
   });

有几点需要注意:

  • 尝试使用$window,而不是window。这是一个很好的习惯,因为它可以帮助你提高可测试性。由于Cordova的内部,您可能实际上需要使用window,但我对此表示怀疑。
  • 完成所有工作的功能都隐藏在$scope.apply内。 如果您忘记这样做,那么您更新的所有变量都不会反映在视图中,直到摘要周期再次运行(如果有的话)。
  • 虽然我将我的示例放在控制器中,但您可能会将其放在处理程序中。如果它是一个角度处理程序(例如ng-click),您可能会认为因为ng-click有一个隐式$ apply包装回调,所以当时不会调用onNotification函数,所以你仍然需要像上面一样$apply
  • ......认真......别忘了申请。 :-)当我调试人员的代码时,它是外部库无法工作的首要原因。我们都至少得到了一次。

答案 1 :(得分:0)

在正文和内部控制器中定义一种邮件控制器,使用LocalSqlServer服务。

HTML:

$window

JS:

<body ng-controller="MainController">
     <!-- other markup .-->
</body>