Angularjs 在何处放置键盘显示事件处理程序,以便它立即启动?

Angularjs 在何处放置键盘显示事件处理程序,以便它立即启动?,angularjs,cordova,keyboard,ionic,Angularjs,Cordova,Keyboard,Ionic,我正在用cordova和angularJS开发一个混合应用程序。 当一个虚拟键盘使用ionic键盘插件出现时,我试图向上移动两个输入文本。 我编写了一个代码,当键盘打开时,将输入文本向上移动,但必须等待其他操作。 例如,只有在用户将焦点放在输入文本上(因此键盘出现)并键入第一个字母后,输入才会移动。。。 我的问题是,我应该把我的代码放在哪里,以便它立即触发?或者我应该对它做些什么改变才能使它工作 这是我的app.js文件的开头 angular.module('starter', ['ionic'

我正在用cordova和angularJS开发一个混合应用程序。 当一个虚拟键盘使用ionic键盘插件出现时,我试图向上移动两个输入文本。 我编写了一个代码,当键盘打开时,将输入文本向上移动,但必须等待其他操作。 例如,只有在用户将焦点放在输入文本上(因此键盘出现)并键入第一个字母后,输入才会移动。。。 我的问题是,我应该把我的代码放在哪里,以便它立即触发?或者我应该对它做些什么改变才能使它工作

这是我的app.js文件的开头

angular.module('starter', ['ionic', 'starter.controllers', 'starter.services', 'ngCordova', 'jrCrop'])

.run(function($rootScope){
                 $rootScope.keyboardIsVisible = false;
                 $rootScope.keyboardIsNotVisible = true;
                 window.addEventListener('native.keyboardshow', keyboardShowHandler);
                 function keyboardShowHandler(keyboardParameters){
                                                      $rootScope.keyboardIsVisible = true;
                                                      $rootScope.keyboardIsNotVisible = false;
                                                  };
                 window.addEventListener('native.keyboardhide', keyboardHideHandler);
                 function keyboardHideHandler(keyboardParameters){
                                                      $rootScope.keyboardIsVisible = false;
                                                      $rootScope.keyboardIsNotVisible = true;
                                                  };
                 })
我的模板

  <div ng-controller="LoginCtrl" ng-class="{ 'connexion-form-keyboard-open': keyboardIsVisible, 'connexion-form': !keyboardIsVisible }" ng-model-onblur>
  <form role="form" id="form" novalidate>
    <input value="{{info.mail}}" ng-model="info.mail" type="text" placeholder="Mail"
    onfocus="this.placeholder = ''" onblur="this.placeholder = 'Mail'" required/>
    <div id="sep"></div>
    <input value="{{info.passwd}}" ng-model="info.passwd" type="password" placeholder="Mot de passe" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Mot de passe'" required/>
  </form>
  </div>

可能是对$rootScope.KeyboardIsVisible的更改不会传播到子范围,直到您开始在输入框中键入,触发$apply/$digest

你为什么不试着在你的范围内广播一个事件呢

在键盘ShowHandler()中:

$rootScope.$broadcast(“keyboardOpenEvent”)

在控制器中:


$scope.$on(“keyboardOpenEvent”,function(){$scope.KeyboardIsVisible=true;})

对$rootScope.KeyboardIsVisible的更改可能不会传播到子范围,直到您开始在输入框中键入,触发$apply/$digest

你为什么不试着在你的范围内广播一个事件呢

在键盘ShowHandler()中:

$rootScope.$broadcast(“keyboardOpenEvent”)

在控制器中:


$scope.$on(“keyboardOpenEvent”,function(){$scope.KeyboardIsVisible=true;})

什么是“必须等待另一个操作?”您能否进一步澄清实际行为?当键盘打开时,KeyboardIsVisible的值仅在用户写入第一个字母时才会更改。当键盘关闭时,该值仅在用户尝试发送表单时更改。在我看来,事件并未被直接考虑在内,用户必须在键盘值可见变化之前做其他事情。“必须等待另一个动作”意味着什么?您能否进一步澄清实际行为?当键盘打开时,keyboardIsVisible的值仅在用户写入第一个字母后更改。当键盘关闭时,该值仅在用户尝试发送表单时更改。在我看来,事件似乎没有直接考虑在内,用户必须在keyboardIsVisible的值发生变化之前做一些其他事情。我理解$rootScope引入的延迟。在我看来,使用$rootScope广播事件不会缩短$rootScope的快捷方式!我测试过了,延迟仍然存在。也许有办法直接在控制器中处理事件?(如果多个模板要使用事件处理程序,则会创建代码冗余,但可能会工作…)您是说事件正在正确广播,但未在$scope中立即接收到吗?你调试过时间戳了吗?此处的$scope.$实际上直接在控制器中处理事件。我很想知道延迟发生在哪里,如果是在广播,$scope.$on,还是角度ng类?是的,我认为这就是发生的。对于时间戳,控制台显示正确的时间。我不知道还能查什么?我启动了一个调试,似乎广播线路已正确到达,但未直接考虑$scope.$on。我理解$rootScope引入的延迟。在我看来,使用$rootScope广播事件不会缩短$rootScope的快捷方式!我测试过了,延迟仍然存在。也许有办法直接在控制器中处理事件?(如果多个模板要使用事件处理程序,则会创建代码冗余,但可能会工作…)您是说事件正在正确广播,但未在$scope中立即接收到吗?你调试过时间戳了吗?此处的$scope.$实际上直接在控制器中处理事件。我很想知道延迟发生在哪里,如果是在广播,$scope.$on,还是角度ng类?是的,我认为这就是发生的。对于时间戳,控制台显示正确的时间。我不知道还能查什么?我启动了一个调试,看起来广播线路已正确到达,但未直接考虑$scope.$on。
.connexion-form-keyboard-open {
    position: absolute;
    width: 100%;
    bottom: 71%;
}

.connexion-form {
    position: absolute;
    width: 100%;
    bottom: 50%;
}