小编Man*_*mar的帖子

角 7 | HostListener 模糊条件停止所有其他事件回调

我有一个要求,我们希望用户解决输入字段错误,并且在完成之前不允许用户在屏幕上进行任何其他操作。

同样,我在输入字段和 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 中复制了相同的场景。请看一看。

https://stackblitz.com/edit/angular-54ermg

javascript onfocus onblur angular

5
推荐指数
1
解决办法
5482
查看次数

角 10 | ngrx 效果 | 单元测试 | 不能将类作为函数调用

将 Angular 项目升级到 Angular 10 后,ngRx 效果单元测试开始出现问题。升级后报错如下:

在此处输入图片说明

遇到同样的问题,按照解决方案。

谢谢,

ngrx ngrx-effects angular angular-unit-test angular10

5
推荐指数
1
解决办法
625
查看次数

Angular Parent/Child Directive的执行顺序

根据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)

我无法掌握指令执行顺序的概念.对于像上面提到的指令一样,我心中的疑问总让我感到困惑.请帮我理解这个.提前致谢!!!

angularjs angularjs-directive

3
推荐指数
1
解决办法
3058
查看次数