Declare varios valores en ng-init

85

Entonces me pregunto cómo puedo declarar múltiples valores dentro de un solo ng-init, sin tener que crear un hash extraño, al que siempre necesito acceder específicamente.

así que básicamente me gustaría

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

y digo que me gustaría evitar tener que hacer

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

Sin embargo lo razonable:

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

no parece funcionar.

Gracias anticipadas

Cosmin
fuente
"a = 1, b = 2"no sería razonable ya que es javascript, y el punto y coma son los que separan las declaraciones, pero la idea es la misma
Bernardo Dal Corno

Respuestas:

144

Usa una función, mucho más legible:

ng-init="init()"

Y:

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

O, si es necesario, separe las variables en línea con un punto y coma:

ng-init="a = 1; b = 2"
tymeJV
fuente
7
esto no funcionará para ng-repeat, ya que tiene su propio alcance, consulte jsfiddle.net/U3pVM/13212
Toolkit
@Toolkit usa notación de puntos (sintaxis controllerAs) para hacer referencia a una función fuera del alcance de aislamiento de una repetición ng. pasar el $ index var predefinido de un ng-repeat a una función llamada desde la vista.
trickpatty
¿De qué lado comienza la evaluación? por ejemplo, si quiero usar una variable en otra declaración, ¿cómo debo escribir mi declaración? ej .: ng-init = "a = 12; b = 1 + a" o init = "b = 1 + a; a = 12;"? ¿Se evalúa desde la izquierda como javascript?
Pooya
@ Пуя - Asumo que sí. Puede probarlo: ng-init="c = a + b; a = 1; b = 2"y ver cuál es el resultado c: la mejor suposición es que va de izquierda a derecha.
tymeJV
39

A veces no es ideal poner las variables en una función. Por ejemplo, su backend está en express y está renderizando un archivo usando jade.

Con Express.js puede enviar variables locales al html. Angular puede aceptar estas variables con

ng-init=""

Utilizando ";" uno puede tener múltiples variables

Ejemplo

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

Prefiero envolver con la variable init del objeto:

<div ng-init="initObject = {initParam: 'initParamValue', anotherOne: 'value'}"></div>
alex.b
fuente
¡Esto es genial!
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>

Y

  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
fuente