Dichiara più valori in ng-init


85

Quindi mi chiedo come posso dichiarare più valori all'interno di un singolo ng-init, senza dover creare qualche strano hash, a cui poi ho bisogno di accedere sempre in modo specifico.

quindi fondamentalmente mi piacerebbe

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

e dico che vorrei evitare di doverlo fare

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

Tuttavia il ragionevole:

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

non sembra funzionare.

Grazie anticipato


"a = 1, b = 2"non sarebbe ragionevole dal momento che il suo javascript e il punto e virgola sono quelli che separano le dichiarazioni, ma l'idea è la stessa
Bernardo Dal Corno

Risposte:


144

Usa una funzione, molto più leggibile:

ng-init="init()"

E:

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

Oppure, se necessario, separa le variabili in linea con un punto e virgola:

ng-init="a = 1; b = 2"

7
questo non funzionerà per ng-repeat, poiché ha un proprio ambito vedere jsfiddle.net/U3pVM/13212
Toolkit

@Toolkit usa la notazione a punti (sintassi controllerAs) per fare riferimento a una funzione al di fuori dell'ambito isolato di una ripetizione ng. passa la variabile $ index predefinita di un ng-repeat a una funzione chiamata dalla vista.
trickpatty

Da che parte parte la valutazione? per esempio, se voglio usare una variabile in un'altra istruzione, come devo scrivere la mia dichiarazione? es: ng-init = "a = 12; b = 1 + a" o init = "b = 1 + a; a = 12;"? valuta da sinistra come javascript?
Pooya

@ Пуя - Presumo di sì. Puoi testarlo: ng-init="c = a + b; a = 1; b = 2"e vedere qual è il risultato di c- Migliore ipotesi, va da sinistra a destra.
tymeJV

39

A volte non è l'ideale per mettere le variabili in una funzione. Ad esempio, il tuo backend è espresso e stai renderizzando un file usando jade.

Con Express.js puoi inviare variabili locali all'html. Angular può accettare queste variabili con

ng-init=""

Utilizzando ";" si possono avere più variabili

Esempio

ng-init=" hello='world'; john='doe' "  

8

Preferisco avvolgere con la variabile di inizializzazione dell'oggetto:

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

Questo è geniale!
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>

E

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

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

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

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

  });
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.