282 votes

Pouvez-vous passer des paramètres à un contrôleur AngularJS lors de la création?

J'ai un contrôleur responsable de la communication avec une API pour mettre à jour les propriétés d'un utilisateur, nom, prénom, email, etc. Chaque utilisateur a un 'id' qui est passé à partir du serveur lors de la page de profil est affiché.

Je voudrais faire passer cette valeur à la AngularJS contrôleur de sorte qu'il sait ce que l'API d'un point d'entrée pour l'utilisateur actuel. J'ai essayé en passant la valeur en ng-controller. Par exemple:

function UserCtrl(id, $scope, $filter) {

$scope.connection = $resource('api.com/user/' + id)

et dans le HTML

<body ng-controller="UserCtrl({% id %})">

{% id %} imprimer l'id envoyé par le serveur. mais j'ai des erreurs.

Quelle est la bonne manière de passer une valeur dans un contrôleur sur sa création?

366voto

Jigar Patel Points 2287

Notes:

Cette réponse est vieux. C'est juste une preuve de concept sur la façon dont il le résultat souhaité peut être obtenu. Cependant, il peut ne pas être la meilleure solution en fonction de certains commentaires ci-dessous. Je n'ai pas de document pour soutenir ou rejeter l'approche suivante. Veuillez vous référer à certains des commentaires ci-dessous pour plus de discussion sur ce sujet.

Réponse Originale À Cette Question:

J'ai répondu présent à Oui, vous ne pouvez absolument le faire en utilisant l' ng-init , et une simple fonction init.

Voici l'exemple de celui-ci sur plunker

HTML

<!DOCTYPE html>
<html ng-app="angularjs-starter">
  <head lang="en">
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
    <script src="app.js"></script>
  </head>  
  <body ng-controller="MainCtrl" ng-init="init('James Bond','007')">
    <h1>I am  {{name}} {{id}}</h1>
  </body>
</html>

JavaScript

var app = angular.module('angularjs-starter', []);

app.controller('MainCtrl', function($scope) {

  $scope.init = function(name, id)
  {
    //This function is sort of private constructor for controller
    $scope.id = id;
    $scope.name = name; 
    //Based on passed argument you can make a call to resource
    //and initialize more objects
    //$resource.getMeBond(007)
  };


});

147voto

Michael Tiller Points 3615

Je suis très en retard pour cela et je n’ai aucune idée si c’est une bonne idée, mais vous pouvez inclure le `` injectable dans la fonction de contrôleur, ce qui permet au contrôleur d’être initialisée à l’aide de « arguments » fournis sur un élément, par exemple

Encore une fois, aucune idée si ce n’est une bonne idée, mais il semble fonctionner et est une autre alternative.

39voto

Jonghee Park Points 161

Cela fonctionne aussi.

JavaScript :

HTML :

15voto

desgnl Points 941

Comme @akonsu et Nigel Findlater suggèrent, vous pouvez lire l’url où url est avec et l’utiliser à l’intérieur du contrôleur.

votre application :

le service de ressources

le contrôleur

Ensuite, est accessible dans la vue selon la .

8voto

goliney Points 2015

Si n’est pas pour passer des objets dans , vous pouvez toujours écrire votre propre directive. Alors, voici ce que j’ai obtenu :

http://jsfiddle.net/goliney/89bLj/

JavaSript :

HTML :

Mais mon approche ne peut modifier les objets, qui sont déjà définies au contrôleur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X