J'ai essayé de l'utiliser avec des liaisons typographiques:
npm install moment --save
typings install moment --ambient -- save
test.ts:
import {moment} from 'moment/moment';
Et sans:
npm install moment --save
test.ts:
var moment = require('moment/moment');
Mais lorsque j'appelle moment.format (), j'obtiens une erreur. Devrait être simple, quelqu'un peut-il fournir une combinaison ligne de commande / importation qui fonctionnerait?
typescript
angular
Sergey Aldoukhov
la source
la source
Réponses:
Mise à jour d'avril 2017:
À partir de la version 2.13.0, Moment inclut un fichier de définition typographique. https://momentjs.com/docs/#/use-it/typescript/
Installez-le simplement avec npm, dans votre type de console
Et puis, dans votre application Angular, l'importation est aussi simple que cela:
Voilà, vous obtenez un support complet de Typescript!
Edition bonus: Pour taper une variable ou une propriété comme
Moment
dans Typo, vous pouvez le faire par exemple:la source
moment
est une ressource mondiale tierce. Le moment où l'objet survitwindow
dans le navigateur. Il n'est donc pas correctimport
dans votre application angular2. À la place, incluez la<script>
balise dans votre html qui chargera le fichier moment.js.Pour rendre TypeScript heureux, vous pouvez ajouter
en haut de vos fichiers où vous l'utilisez pour arrêter les erreurs de compilation, ou vous pouvez utiliser
ou utilisez tsd pour installer le fichier moment.d.ts que TypeScript pourrait trouver par lui-même.
Exemple
Assurez-vous simplement d'ajouter la balise de script dans votre html ou le moment n'existera pas.
Chargement du module
moment
Vous devez d'abord configurer un chargeur de module tel que System.js pour charger les fichiers commonjs du moment
Ensuite, pour importer le moment dans le fichier si nécessaire, utilisez
ou
ÉDITER:
Il existe également des options avec certains bundleurs tels que Webpack ou SystemJS builder ou Browserify qui garderont un moment hors de l'objet fenêtre. Pour plus d'informations à ce sujet, veuillez consulter leurs sites Web respectifs pour obtenir des instructions.
la source
System
charger dans la version du nœud commonjs de moment et ensuite vous seriez en mesure de le référencer avecimport * as moment from 'moment';
ouimport moment = require('moment');
qui à toutes fins utiles sont identiques, mais qui ont quelques différences subtiles dans le script.typings install moment --ambient -- save
ne déroule pastypings
le fichier de définition et ne crée pas la référence à///<reference path="./path/to/moment.d.ts" />
? J'ai la même erreur lors de l'exécutionnpm run tsc
import
le moment ing.Ce qui suit a fonctionné pour moi.
Tout d'abord, installez les définitions de type pour le moment.
typings install moment --save
(Remarque: NON
--ambient
)Ensuite, pour contourner l'absence d'une exportation appropriée:
la source
import moment from "moment";
place pour le faire fonctionner.import * as moment from 'moment';
C'est la clé.J'irais avec ce qui suit:
npm install moment --save
Au tableau de votre
systemjs.config.js
fichier,map
ajoutez:'moment': 'node_modules/moment'
au
packages
tableau, ajoutez:'moment': { defaultExtension: 'js' }
Dans votre component.ts utilisez:
import * as moment from 'moment/moment';
et c'est tout. Vous pouvez utiliser de la classe de votre composant:
today: string = moment().format('D MMM YYYY');
la source
Nous utilisons des modules maintenant,
essayer
import {MomentModule} from 'angular2-moment/moment.module';
après
npm install angular2-moment
http://ngmodules.org/modules/angular2-moment
la source
npm install moment --save
,npm install @types/moment --save
stackoverflow.com/questions/35166168/…import * as moment from 'moment';
Pour l'utiliser dans un
Typescript
projet, vous devrez installer moment:npm install moment --save
Après avoir installé moment, vous pouvez l'utiliser dans n'importe quel
.ts
fichier après l'avoir importé:import * as moment from "moment";
la source
--- Mise à jour 11/01/2017
Les saisies sont désormais obsolètes et ont été remplacées par npm @types . Désormais, obtenir des déclarations de type ne nécessitera aucun outil en dehors de npm. Pour utiliser Moment, vous n'aurez pas besoin d'installer les définitions de type via @types car Moment fournit déjà ses propres définitions de type.
Ainsi, il se réduit à seulement 3 étapes:
1 - Moment d'installation qui inclut les définitions de type:
2 - Ajoutez la balise script dans votre fichier HTML:
3 - Maintenant, vous pouvez simplement l'utiliser. Période.
--- Réponse originale
Cela peut se faire en seulement 3 étapes:
1 - Installer la définition du moment - fichier * .d.ts :
2 - Ajoutez la balise script dans votre fichier HTML:
3 - Maintenant, vous pouvez simplement l'utiliser. Période.
la source
declare var moment;
Cependant, les saisies ne fonctionnent pas pour moi. Après avoir tapémoment().
pas d'intellisense. Je suppose que je manque quelques étapes ici.Pour Angular 7+ (prend également en charge 8 et 9) :
1: installez moment par commande
npm install moment --save
2: N'ajoutez rien dans le
app.module.ts
3: Ajoutez simplement une déclaration d'importation en haut de votre
component
fichier ou de tout autre fichier comme celui-ci:import * as moment from 'moment';
4: Vous pouvez maintenant utiliser
moment
n'importe où dans votre code. Juste comme:myDate = moment(someDate).format('MM/DD/YYYY HH:mm');
la source
import * as moment_ from 'moment'; const moment = moment_;
sinon je recevaisError: Cannot call a namespace ('moment')
moment_
est juste un nom littéral. Ça peut être n'importe quoi, je pense ...import * as moment from 'moment';
Sachez simplement que la taille du bundle augmente de ~ 500 Ko. Il y a un bon article expliquant le problème avec une solution medium.jonasbandi.net/…avec ng CLI
dans app.module
dans le composant
de cette façon, vous importez le moment une fois
MISE À JOUR Angulaire => 5
Pour moi travaille en prod avec aot et aussi avec universal
Je n'aime pas en utiliser mais j'utilise l'instant.
la source
Parameter 'moment' implicitly has an 'any' type
erreur.La bibliothèque angular2-moment a des canaux comme {{myDate | amTimeAgo}} à utiliser dans les fichiers .html.
Ces mêmes canaux sont également accessibles en tant que fonctions Typescript dans un fichier de classe de composant (.ts). Installez d'abord la bibliothèque comme indiqué:
Dans le node_modules / angular2-moment seront désormais des fichiers ".pipe.d.ts" comme calendar.pipe.d.ts , date-format.pipe.d.ts et bien d'autres.
Chacun d'eux contient le nom de la fonction Typescript pour le canal équivalent, par exemple, DateFormatPipe () est la fonction pour amDateFormatPipe .
Pour utiliser DateFormatPipe dans votre projet, importez-le et ajoutez-le à vos fournisseurs globaux dans app.module.ts:
Ensuite, dans n'importe quel composant où vous souhaitez utiliser la fonction, importez-le par dessus, injectez dans le constructeur et utilisez:
Pour utiliser l'une des fonctions, suivez ce processus. Ce serait bien s'il y avait un moyen d'accéder à toutes les fonctions, mais aucune des solutions ci-dessus ne fonctionnait pour moi.
la source
Si vous êtes d'accord pour ajouter plus de packages tiers, j'ai utilisé la bibliothèque angular2-moment . L'installation a été assez simple et vous devez suivre les dernières instructions sur le fichier README. J'ai également installé des saisies à la suite de cela.
Fonctionné comme un charme pour moi, et à peine ajouté un code pour le faire fonctionner.
la source
Je ne sais pas si c'est toujours un problème pour les gens, cependant ... En utilisant SystemJS et MomentJS comme bibliothèque, cela l'a résolu pour moi
Fonctionne très bien à partir de là pour moi.
la source
pour angular2 RC5, cela a fonctionné pour moi ...
premier moment d'installation via npm
Importez ensuite le moment dans le composant que vous souhaitez utiliser
enfin configurer le moment dans systemjs.config.js "map" et "packages"
la source
import 'moment/locale/de.js';
Merci!En plus de la réponse de SnareChop, j'ai dû changer le fichier de frappe pour momentjs.
En
moment-node.d.ts
j'ai remplacé:avec
la source
Moment.js prend désormais en charge TypeScript dans la version 2.14.1.
Voir: https://github.com/moment/moment/pull/3280
la source
Ma propre version de l'utilisation de Moment in Angular
npm i moment --save
Importez d'abord le moment as
_moment
, puis déclarez lamoment
variable de type_moment.Moment
avec une valeur initiale de_moment()
.L'importation simple de moment ne vous donnera pas de complétion automatique, mais si vous déclarez moment avec l'
Moment
interface de type depuis l'_moment
espace de noms du'moment'
package initialisé avec l'espace de noms de moment invoqué_moment()
vous donne la complétion automatique des api de moment.Je pense que c'est la façon la plus angulaire d'utiliser moment sans utiliser
@types
typings
ou les fournisseurs angulaires, si vous cherchez la saisie automatique pour les bibliothèques javascript vanille comme moment.la source
npm install @types/moment --save
Essayez d'ajouter
"allowSyntheticDefaultImports": true
à votre fichiertsconfig.json
.Que fait le drapeau?
Cela indique essentiellement au compilateur TypeScript qu'il est correct d'utiliser une instruction d'importation ES6, c'est-à-dire
sur un module CommonJS comme Moment.js qui ne déclare pas d'export par défaut. L'indicateur affecte uniquement la vérification de type, pas le code généré.
Il est nécessaire si vous utilisez SystemJS comme chargeur de module. L'indicateur sera automatiquement activé si vous dites à votre compilateur TS que vous utilisez SystemJS:
Cela supprimera également toutes les erreurs générées par les IDE s'ils sont configurés pour utiliser le
tsconfig.json
.la source
pour angular2 avec systemjs et jspm devait faire:
la source
Pour les utilisateurs de la CLI ANGULAIRE
L'utilisation de bibliothèques externes se trouve dans la documentation ici:
https://github.com/angular/angular-cli/wiki/stories-third-party-lib
la source
J'ai suivi les conseils pour autoriser allowSyntheticDefaultImports (car il n'y a pas d'export du moment à utiliser pour moi), en utilisant System. Ensuite, j'ai suivi les conseils de quelqu'un à utiliser:
Le moment étant mappé dans ma configuration system.js. Les autres déclarations d'importation ne fonctionneraient pas pour moi, pour une raison quelconque
la source
Ce qui suit a fonctionné pour moi:
Le nœud moment n'existe pas dans le référentiel de typages. Vous devez rediriger vers Definitely Typed afin de le faire fonctionner en utilisant le préfixe dt.
la source
Avec systemjs, ce que j'ai fait, dans mon systemjs.config, j'ai ajouté une carte pour
moment
Et puis vous pouvez facilement importer
moment
simplement en faisantla source
Je sais que c'est un vieux fil, mais pour moi, la solution la plus simple qui a réellement fonctionné était:
npm install moment --save
la source