javascript - 集成非 Angular 代码?

标签 javascript angularjs

我正在开发一个 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 函数可以访问我的作用域/rootScope 变量?

最佳答案

通常,您会将第 3 方库包装在 servicefactory 中,但本着回答您的特定场景的精神......

这是一种可能性:

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

需要注意的几件事:

  • 尝试使用$window,而不是window。这是一个值得养成的好习惯,因为它将帮助您提高可测试性。由于 Cordova 的内部结构,您实际上可能需要使用 window,但我对此表示怀疑。
  • 完成所有工作的函数都隐藏在 $scope.apply 中。 如果您忘记执行此操作,则您更新的任何变量都不会反射(reflect)在 View 中,直到摘要周期再次运行(如果有)。
  • 虽然我将示例放在 Controller 中,但您也可以将示例放在处理程序中。如果它是一个 Angular 处理程序(例如 ng-click),您可能会认为因为 ng-click 有一个隐式 $apply 包装回调,所以您的 当时并没有调用 onNotification 函数,因此您仍然需要执行 $apply,如上所述。
  • ...说真的...别忘了申请。 :-) 当我调试人们的代码时,这是外部库无法工作的首要原因。我们都至少被咬过一次。

关于javascript - 集成非 Angular 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29829169/

相关文章:

html - 如何 Angular2 @Component 添加 css 和更少?

javascript - 如何使用 javascript 获取 div 元素的高度和宽度的有用值?

javascript - 在 angular.js 中,我可以在 $eval() 之前过滤一些东西吗?

javascript - 带有影响内部 ng-repeat 逻辑的外部 ng-repeat 项的嵌套 ng-repeat

javascript - AngularJS:将表单字段的值设置为各种对象属性

javascript - 如何销毁 stateChange 上的 $scope 值?

javascript - 在事件监听器中使用 .replace() 更改某些文本,无法使其工作

javascript - 模态外部 URL 重定向不当

javascript - 翻转第二个 div 和第三个 div

html - angular-strap aside 不能在 navbar-fixed-top 上正确显示