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


"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"

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' "  

8

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

<div ng-init="initObject = {initParam: 'initParamValue', anotherOne: 'value'}"></div>

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; };

  });
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.