Déclarer plusieurs valeurs dans ng-init

85

Je me demande donc comment déclarer plusieurs valeurs dans un seul ng-init, sans avoir à créer un hachage étrange, auquel je dois toujours accéder spécifiquement.

donc fondamentalement je voudrais

<div ng-init="a = 1, b = 2">{{a}}</div>

et je dis que j'aimerais éviter d'avoir à faire

<div ng-init="unecessary_bs = {a: 1, b: 2}">{{unecessary_bs.a}}</div>

Cependant le raisonnable:

<div ng-init="a = 1, b = 2">{{a}}</div>

ne semble pas fonctionner.

Remerciements anticipés

Cosmin
la source
"a = 1, b = 2"ne serait pas raisonnable puisque son javascript, et les points-virgules sont ceux qui séparent les déclarations, mais l'idée est la même
Bernardo Dal Corno

Réponses:

144

Utilisez une fonction, bien plus lisible:

ng-init="init()"

Et:

$scope.init = function() {
    $scope.a = 1;
    $scope.b = 2;
}

Ou, si vous devez, séparez les variables en ligne par un point-virgule:

ng-init="a = 1; b = 2"
tymeJV
la source
7
cela ne fonctionnera pas pour ng-repeat, car il a sa propre portée voir jsfiddle.net/U3pVM/13212
Toolkit
@Toolkit utilise la notation par points (syntaxe controllerAs) pour référencer une fonction en dehors de la portée isolate d'un ng-repeat. passez le $ index var prédéfini d'un ng-repeat à une fonction appelée depuis la vue.
trickpatty
De quel côté commence l'évaluation? par exemple, si je veux utiliser une variable dans une autre instruction, comment dois-je écrire ma déclaration? ex: ng-init = "a = 12; b = 1 + a" ou init = "b = 1 + a; a = 12;"? évalue-t-il de gauche comme javascript?
Pooya
@ Пуя - Je suppose que oui. Vous pouvez le tester: ng-init="c = a + b; a = 1; b = 2"et voir ce que le résultat cest - Meilleure estimation, il va de gauche à droite.
tymeJV
39

Parfois, ce n'est pas idéal de mettre les variables dans une fonction. Par exemple, votre backend est en express et vous effectuez le rendu d'un fichier en utilisant jade.

Avec Express.js, vous pouvez envoyer des variables locales au html. Angular peut accepter ces variables avec

ng-init=""

En utilisant ";" on peut avoir plusieurs variables

Exemple

ng-init=" hello='world'; john='doe' "  
andrewoodleyjr
la source
8

Je préfère envelopper avec la variable d'objet init:

<div ng-init="initObject = {initParam: 'initParamValue', anotherOne: 'value'}"></div>
alex.b
la source
C'est du génie!
Cengkuru Michael
3
 <div ng-app="app">
  <div ng-controller="TodoCtrl">
    <ul>
      <li ng-repeat="todo in todos" ng-init='initTodo = init(todo)'>
        <span class="done-{{todo.done}}">{{todo.text}} |
                               and todo.text via init:{{initTodo}}</span>
      </li>
    </ul>

  </div>

ET

  var modulse = angular.module("app",[]);

  modulse.controller("TodoCtrl", function ($scope)  {

            $scope.todos = [ {text:'todo1'}, {text:'todo2'}]; 

            $scope.init = function (todo) {  return todo.text; };

  });
Indrakiran Reddy
la source