Comment passer des données à partir de asp.NET MVC Angular2
Quelle est la meilleure façon de transmettre les données à partir d'un ASP.NET MVC contrôleur Angulaire 2.0 composant. Pour exemple, nous utilisons la ASP.NET Modèle MVC et aimerais envoyer un JSON version Angulaire, donc on peut l'utiliser dans Angulaire.
Au moment où le contrôleur est de servir la vue, nous sommes en mesure de pousser certaines données à Angular2 (le modèle). Supplémentaires appel AJAX pour récupérer des données n'est pas nécessaire.
Cependant j'ai du mal à "injecter" dans l'angle de la composante. Comment faites-vous cela? Toutes les bonnes références? Comme vous l'avez peut-être remarqué, je suis assez nouveau à Angular2.
Mon index.cshtml ressemble à ceci.
<div class="container">
<div>
<h1>Welcome to the Angular 2 components!</h1>
</div>
<div class="row">
<MyAngular2Component>
<div class="alert alert-info" role="alert">
<h3>Loading...</h3>
</div>
</MyAngular2Component>
</div>
</div>
Salutations,
Rob
Vous avez besoin de construire un REST-API qui fournit des données JSON. Cela va peut-être vous aider: asp.net/web-api/overview/older-versions/...
Pour plus de clarté: j'ai ajouté l'idée que j'étais en train de créer. ce qui est une .cshtml fichier.
J'ai l'habitude de laisser mon contrôleurs mvc fournir un rôle mixte: ils peuvent fournir soit l'angle de vue (que vous avez déjà), ou ils peuvent être des sources de données qui, au lieu de retourner le html, le retour json. Peut être fait dans un "nettoyeur" avec un repos séparée de l'api, mais cela fonctionne.
Avez-vous un exemple de la façon de faire dans Angulaire 2 ?
OriginalL'auteur Rob Van Pamel | 2016-04-25
Vous devez vous connecter pour publier un commentaire.
La meilleure façon que j'ai trouvé pour transmettre les données à partir de MVC (ou toute hébergement/page de démarrage) est de spécifier les données comme un attribut sur le bootstrap composant, et l'utilisation
ElementRef
pour récupérer directement la valeur.Ci-dessous est un exemple pour MVC dérivé de la cette réponse, qui stipule qu'il n'est pas possible d'utiliser
@Input
pour racine au niveau des composants.Exemple:
Si vous voulez récupérer des données plus complexe qui n'est pas adapté pour un attribut, vous pouvez utiliser la même technique, il suffit de mettre les données dans un format HTML
<input type='hidden'/>
ou un élément caché<code>
élément, et utiliser du JS pour récupérer la valeur.Avertissement: Accéder au DOM directement à partir d'une liaison de données de l'application tels que Anguleuses, rompt la liaison de données de motif, et doit être utilisé avec prudence.
OriginalL'auteur Joseph Gabriel
Vous devriez regarder pour des questions similaires liées à AngularJS, pas Angulaire 2 spécifiques, comme la principale essence de la chose reste la même:
Dans ce post par Marius Schulz, vous pouvez voir qu'il sérialise les données et les utilise que pour remplir un modèle AngularJS
value
composant:Quelque chose de semblable pourrait être faite à injecter des données, par exemple en
window.myNamespace.myServerData
, puis ont Angular2 bootstrap que la valeur parmi d'autres prestataires.Dans ce post par Roel van Lisdonk, une approche similaire est utilisée, encore une fois, pour remplir un AngularJS à base de modèle, avec qui
ng-init
directive:Que le premier post de points, il y a quelque chose à penser (coller ici):
La deuxième partie est peut-être moins un problème si votre servi page est déjà dynamique côté serveur, c'est à dire si il a déjà bits rempli de données côté serveur.
HTH
OriginalL'auteur superjos
Vous pouvez utiliser le
Input
fonction exposée par@angular/core
, j'ai par exemple Angulaire à 2 composants à afficher des messages d'information à l'utilisateur de l'applicationMon gabarit HTML de prendre Angulaire à 2
Message
propriétéLa
Message
propriété est passée comme une entrée à mon Angulaire 2 composant nommé informationmessage.composante.ts, par exempleJ'ai ensuite transmettre les données vers mon
InformationMessageComponent
l'aide de la propriété de liaison dans la page HTML, par exemple.Vous pouvez remplacer
InformationMessage
dans l'exemple ci-dessus avec les données que vous obtenez à partir de votre contrôleur MVC par exempleVeuillez noter: je n'ai pas tester ce scénario, mais il n'y a pas de raison technique pour que cela ne fonctionne pas, à la fin de la journée, vous êtes juste la liaison d'une valeur Angulaire à 2 propriété.
OriginalL'auteur user65439
Vous avez besoin d'abord de regrouper les services et les contrôleurs de module séparé des fichiers et de la charge des services avant de les contrôleurs.
Par exemple:
Alors vous avez besoin pour charger le code JavaScript de Services par ASP.NET MVC JavaScript résultat, ici, vous avez besoin d'injecter votre démarrage de données.
Puis dans le index.html charger les scripts comme suit
De cette façon, vous pouvez injecter des données dans angulaire du code pendant le chargement.
Cependant, même cela a un impact sur les performances en raison du temps passé à aller chercher de la vue, de la compilation de l'affichage et de liaison de données à la vue. Pour un chargement initial, les performances peuvent encore être améliorées si vous utilisez le Serveur de Rendu Côté.
OriginalL'auteur Jigar
src/ApplicationConfiguration.ts
src/main.ts
src/index.html
src/app/app.composante.ts
OriginalL'auteur
J'ai trouvé une solution beaucoup plus simple. Ne pas tenter d'obtenir l'attribut dans le constructeur! Utiliser le
ngOnInit()
crochet à la place. La propriété est accessible dès lors qu'il a été décoré avec@Input()
. Il semble simplement qu'il n'est pas disponible au moment où le constructeur est appelé.Composant HTML:
Composant TS:
OriginalL'auteur Eraph