2015-12-08 7 views
1

У меня есть рабочий штраф InAppBrowser в моем приложенииInAppBrowser передавая функцию обратного вызова

$scope.openInAppBrowser = function (url) { 
     var ref = window.open(encodeURI(url), '_blank', 'location=yes'); 
     ref.addEventListener('loadstop', function (event) { 
      if (event.url.match("close")) { 
       $scope.refreshGamePage = 1; // this variable is under watch in a directive 
       ref.close(); 
      }   
     }); 
    } 

здесь директива написано, чтобы обновить страницу

module.directive('reloadPage', ['$http', function ($http) { 
    return { 
     restrict: 'A', 
     link: function ($scope, element, attrs) { 
      $scope.refreshPage = function() { 
       if($scope.refreshGamePage ==1) 
        return true; 
       else 
        return false; 
      }; 

      $scope.$watch($scope.refreshPage, function (v) { 
       if (v) { 
        $scope.setGamePage(); // this function will contains code to refresh game page 
       } 
       }); 
      }  
     }; 
    }]); 

но похоже слушателем loadstop событий не в состоянии обновить переменную области видимости. Может ли кто-нибудь помочь мне с этим?

В принципе, я хочу обновить текущую страницу (из которой открывается InAppBrowser) в моем приложении, как только InAppBrowser закроется.

Любой лучший способ достичь этого будет оценен по достоинству.

+0

вместо 'асинхронных (функция() {});' 'использовать асинхронный (. Функция() {} связывания (это));'. Выполнение этого делает 'this' доступным внутри функции. – x13

+1

@ThisNameBetterBeAvailable ваше решение не сработало для меня. Я не знаю, что я пропустил. В любом случае после многого поиска я нашел это http://stackoverflow.com/a/23988104/1760421. Я попробую. – Yogesh

ответ

1

Просто используйте угловой $ применяется метод(), чтобы изменить значение угловых переменных, поскольку она изменяется из angularjs очереди.

$scope.openInAppBrowser = function (url) { 
     var ref = window.open(encodeURI(url), '_blank', 'location=yes'); 
     ref.addEventListener('loadstop', function (event) { 
      if (event.url.match("close")) { 
       $scope.$apply(function() { 
       $scope.refreshGamePage = 1; 
       }); 
       ref.close(); 
      }   
     }); 
    } 
Смежные вопросы