jquery - 导航器警报功能在第二次后起作用

标签 jquery angularjs cordova

我有一个按钮,点击后我执行此功能:

$scope.sendPolicy = function(){
    // make server request and called this call back:
    navigator.notification.alert(
        "message",
        function(){
            $state.transitionTo('main', {
                Id: $scope.Id
                });
        },
        'title',
        'confirm');

警报弹出正常,但是当单击确认按钮时,警报消失,仅此而已。没有其他事情发生(应该触发到主屏幕的转换。)警报解除后,如果再次单击导致警报弹出的按钮,则会触发 View /页面传输,然后我们弹回到主屏幕页面,并且警报再次弹出。

问题是:

  1. 为什么确认按钮没有触发弹回/转移到主屏幕。
  2. 为什么再次单击该按钮会导致弹出/传输?
  3. 为什么这次额外的点击会再次触发警报?

最佳答案

  1. 我认为这是在 Angular 范围之外获得确认时 Angular 不更新的问题。看来您可能需要手动运行摘要/应用,以便 Angular 可以更新范围。

  2. 当再次单击按钮时,Angular 正在运行更新,现在范围具有转换信息,但它也会再次调用警报,因为这将是一个单独的单击事件。

  3. 在 2 中进行了解释。

要解决这个问题,我认为您需要在某个时候调用 $scope.apply() ,如下所示:

 $scope.sendPolicy = function(){
// make server request and called this call back:
navigator.notification.alert(
    "message",
    function(){
        $state.transitionTo('main', {
            Id: $scope.Id
            });
    if(!$scope.$$phase){$scope.$apply();}        
    },
    'title',
    'confirm');

或者在警报函数的末尾调用它。

注意:您可以将其称为 $scope.$apply(),但是如果摘要已经在进行中,这可能会引发错误,因此调用此方法的安全方法是 if(!$scope.$$phase) {$scope.$apply();} 仅在未进行时才调用。

关于jquery - 导航器警报功能在第二次后起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20785970/

相关文章:

android - 如何让图像显示在 phonegap 应用程序上

android - Phonegap 我在谷歌地图上的地理位置

jquery - CGridView - 为删除行按钮添加自定义功能

javascript - 在 Meteor 中使用 custombox.js 打开模式弹出窗口

javascript - 加载页面后如何使用javaScript在同一页面上添加重复图像

angularjs - 检查 null、empty 或 undefined angularjs

javascript - Angular.js - 表单验证会发出任何事件吗?

jquery-mobile - 使用 JQuery Mobile 和 Phonegap 缩放 HTML 内容

javascript - 当用户打开一个站点时,在 Magento 主页上打开一个弹出窗口一次

javascript - 在 AngularJS 中自动创建服务实例(无延迟加载)