javascript - Importera generiska JS-funktioner till Angular-modul
Lite av en nybörjare på Angular/Typescript här.
Jag har satt upp ett JavaScript-bibliotek av exporterade hjälpfunktioner som jag nu vill importera till Angular-komponenter och använda i dessa komponenters .html-mallfiler.
Här är mitt Javascript-bibliotek, template-functions/data-types.ts:
export const isNumeric = val => !Array.isArray(val) && (val - parseFloat(val) + 1) >= 0;
Det är en enkel pilfunktion som jag exporterar:
Här är hur jag importerar det i min komponent:
import { Component, OnInit, Input } from '@angular/core';
import { MyModel } from '../model/my-model';
import { isNumeric } from '../template-functions/data-types';
@Component({
selector: 'my-module',
templateUrl: './my-module.html'
})
export class MyModule implements OnInit {
@Input() public mymodeldetails: MyModel;
constructor() { }
ngOnInit() { }
// isNumeric = val => !Array.isArray(val) && (val - parseFloat(val) + 1) >= 0;
}
Detta är efter flera timmar av att ha Angular-kompilatorn och VSCode som säger åt mig att de inte kunde hitta data-types-modulen, även om sökvägen var korrekt. Jag hade en .js-filändelse istället för en .ts!
Så nu kan Angular se min isNumeric-funktion, men jag gör det .html-mallfilen ser den inte med det jag har gjort hittills. Webbläsaren ger felet "_co.isNumeric är inte en funktion".
Vad mer behöver jag göra för att få min Angular-mall att se min importerade funktion?
Jag använder Angular 6.
Svar #1
För att göra det synligt i mallen, omslut det i en komponentmetod:
import { isNumeric } from '../template-functions/data-types';
export class MyComponent implements OnInit {
isNumeric(val: any): boolean {
return isNumeric(val);
}
}
Se denna stackblitz för en demo.
Som förklaras i dokumentationen för Angulars templatesyntax:
Uttryckskontexten är vanligtvis komponent-instansen. (...) Malluttryck kan inte referera till något i det globala namnområdet (förutom
undefined). De kan inte referera tillwindowellerdocument. De kan inte anropaconsole.logellerMath.max. De är begränsade till att referera till medlemmar i uttryckskontexten.
Svar #2
För framtida läsare:
För att använda en importerad funktion i mallen, tilldela den till en egenskap.
import { isNumeric } from '../template-functions/data-types';
export class MyComponent implements OnInit {
isNumeric = isNumeric;
}
