我有一个要求,我们希望用户解决输入字段错误,并且在完成之前不允许用户在屏幕上进行任何其他操作。
同样,我在输入字段和 onBlur 上实现了 HostListener,如果验证方案失败,我会将焦点设置回输入字段。
并且,我正在执行 e.preventDefault() 和 e.stopPropagtion() 来停止要在页面上执行的所有其他事件回调(在设置focus后,blur将是要执行的第一个事件)。
但不知何故,在任何外部事件上,blur确实会被执行,但不限制其他事件的执行。那些也正在执行,否则我将无法实现所需的功能。
import { Directive, HostListener, Input } from '@angular/core';
@Directive({
selector: '[appNumberFormat]'
})
export class NumberFormatDirective {
constructor() { }
@HostListener('blur', ['$event']) blur(evt) {
evt.preventDefault();
console.log('field focus...');
evt.target.focus();
return false;
// if (evt.target.value.trim() === '') {
// this.formControl.control.setValue(this.defaultValue);
// }
}
}
Run Code Online (Sandbox Code Playgroud)
我在 stackBlitz 中复制了相同的场景。请看一看。
根据angulars文档,只有在执行了子指令的post link函数后,才会执行"Parent"的Post link功能.
但是,在以下代码的情况下,为什么我需要触发"emit"事件来通知ng-repeat已经完成.理想情况下,它应该自动运行而不需要发出事件.
<div ng-controller="Ctrl" my-main-directive>
<div ng-repeat="thing in things" my-repeat-directive>
thing {{thing}}
</div>
</div>
angular.module('myApp', [])
.directive('myRepeatDirective', function() {
return function(scope, element, attrs) {
angular.element(element).css('color','blue');
if (scope.$last){
window.alert("im the last!");
}
};
})
.directive('myMainDirective', function() {
return function(scope, element, attrs) {
angular.element(element).css('border','5px solid red');
};
});
Run Code Online (Sandbox Code Playgroud)
我无法掌握指令执行顺序的概念.对于像上面提到的指令一样,我心中的疑问总让我感到困惑.请帮我理解这个.提前致谢!!!
angular ×2
angular10 ×1
angularjs ×1
javascript ×1
ngrx ×1
ngrx-effects ×1
onblur ×1
onfocus ×1