Я получаю непредсказуемые результаты от попытки интегрировать cordova.js в свой угловой контроллер.
<div class="side-menu" ng-class="{'show_menu' : show_menu }" ng-swipe-left="show_menu = !show_menu"> // more stuff</div>
INITAL CODE:
$scope.init =function() {
document.addEventListener("deviceready", $scope.onDeviceReady, false);
}
$scope.onDeviceReady = function() {
document.addEventListener("backbutton", $scope.onBackKeyDown, false);
}
ЗА РАБОТОЙ:
$scope.onBackKeyDown = function($scope) {
alert('backbutton pressed');
}
ТАКЖЕ РАБОТАЕТ
Это вызывает функцию (не связанную с show_menu
и show_menu
меняет состояние show_menu
$scope.onBackKeyDown = function() {
$scope.filterby('dance');
$scope.show_menu = !$scope.show_menu;
}
НЕ РАБОТАЕТ
Просто ничего здесь не происходит
$scope.onBackKeyDown = function() {
$scope.show_menu = !$scope.show_menu;
}
У меня $scope.show_menu
объявлено как false, как только контроллер начнет, поэтому я не могу понять, почему он полагается на несвязанную функцию, которая должна быть вызвана до того, как она начнет работать.
РЕДАКТИРОВАТЬ:
Я обнаружил, что он работает, но он ждет, пока не появится следующее событие angularjs. например, ничего не происходит с меню, но затем, если я нажму кнопку триггера после другого события, которое не связано с меню, ТОГДА изменяется состояние меню.
Вы можете использовать угловые события $ apply(), а addEventListener - отдельные, поэтому иногда вам нужно использовать "$ apply()", потому что он обновляет угловой код. В качестве альтернативы вы можете использовать Factory или Service для отслеживания переменных, которые вы передаете между событиями. Еще один вариант был бы, если бы вы хотели избежать использования применения, используйте пример "контроллер как синтаксис" ng-controller = "AppCtrl as app", затем присоедините свои переменные как app.show_menu, например.
$timeout(function(){}, 0, true)
безопаснее, чем$apply()
причина в том, что $ timeout (с true) ставит в очередь перерисовку сразу в конце последнего перезаписи, в то время как$apply()
может выдать ошибку$digest already in progress
выполняется.