从 Angular js 升级到 Angular 8 的指令

Posted

技术标签:

【中文标题】从 Angular js 升级到 Angular 8 的指令【英文标题】:Upgrade directive from angular js to angular 8 【发布时间】:2020-04-01 15:38:33 【问题描述】:

有人可以帮助将此指令升级为 angular 2+

我喜欢这个指令,因为让我只验证浮动,也可以复制粘贴数据或将数据放入其中

var myApp = angular.module('myApp', ['ngStorage']);
myApp.controller('MyCtrl', ['$scope', function($scope) 

]).directive('floatOnly', function() 
  return 
    require: 'ngModel',
    restrict: 'A',
    link: function(scope, element, attrs, modelCtrl) 
      modelCtrl.$parsers.push(function(inputValue) 
        if (inputValue === undefined) return '';

        // Remove forbidden characters
        cleanInputValue = inputValue.replace(',', '.') // change commas to dots
          .replace(/[^\d.]/g, '') // keep numbers and dots
          .replace(/\./, "x") // change the first dot in X
          .replace(/\./g, "") // remove all dots
          .replace(/x/, "."); // change X to dot
        if (cleanInputValue != inputValue) 
          modelCtrl.$setViewValue(cleanInputValue);
          modelCtrl.$render();
        
        return cleanInputValue;
      );
    
  
);

jsfiddle example

【问题讨论】:

【参考方案1】:

试试这个: WORKING DEMO

import  Directive, Renderer2, ElementRef, HostListener  from '@angular/core';

@Directive(
  selector: '[float-only]'
)
export class FloatOnlyDirective
  constructor(private elem: ElementRef, private render: Renderer2)   
  @HostListener('input')
  onChange() 
    let value = this.elem.nativeElement.value.replace(',', '.') 
          .replace(/[^\d.]/g, '') // keep numbers and dots
          .replace(/\./, "x") // change the first dot in X
          .replace(/\./g, "") // remove all dots
          .replace(/x/, ".") ;
    this.elem.nativeElement.value = value;
  


您也可以使用Renderer2 更新innerhtml。这样会更干净,

祝您的 Angular 之旅万事如意!!

【讨论】:

以上是关于从 Angular js 升级到 Angular 8 的指令的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Angular 8 后出现 d3.js 运行时错误

如何从 Angular 4 更新/升级到 Angular 5+

从 Angular 9 升级到 Angular 10 时遇到问题

从 Angular 5 升级到 Angular 6,Bootstrap 按钮样式没有间距

想要将项目从 Angular v5 升级到 Angular v6

从 Angular 11 升级到 12 会导致对等依赖冲突