Declarar vários valores em ng-init

85

Então, estou me perguntando como posso declarar vários valores dentro de um único ng-init, sem ter que criar algum hash estranho, que eu preciso sempre acessar especificamente.

então basicamente eu gostaria

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

e estou dizendo que gostaria de evitar ter que fazer

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

No entanto, o razoável:

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

não parece funcionar.

Obrigado antecipado

Cosmin
fonte
"a = 1, b = 2"não seria razoável já que é javascript, e ponto-e-vírgula é que separa os enunciados, mas a ideia continua a mesma
Bernardo Dal Corno

Respostas:

144

Use uma função de maneira mais legível:

ng-init="init()"

E:

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

Ou, se necessário, separe as variáveis ​​embutidas com um ponto e vírgula:

ng-init="a = 1; b = 2"
tymeJV
fonte
7
isso não funcionará para ng-repeat, pois tem seu próprio escopo, consulte jsfiddle.net/U3pVM/13212
Toolkit
@Toolkit usa notação de ponto (sintaxe controllerAs) para fazer referência a uma função fora do escopo isolado de uma repetição de ng. passe o $ index var predefinido de uma repetição de ng para uma função chamada a partir da visualização.
trickpatty de
De que lado começa a avaliação? por exemplo, se eu quiser usar uma variável em outra declaração, como devo escrever minha declaração? ex: ng-init = "a = 12; b = 1 + a" ou init = "b = 1 + a; a = 12;"? ele avalia da esquerda como javascript?
Pooya de
@ Пуя - Eu presumo que sim. Você pode testá-lo: ng-init="c = a + b; a = 1; b = 2"e ver qual é o resultado c- Melhor palpite, vai da esquerda para a direita.
tymeJV
39

Às vezes, não é ideal colocar as variáveis ​​em uma função. Por exemplo, seu back-end é expresso e você está renderizando um arquivo usando jade.

Com Express.js você pode enviar variáveis ​​locais para o html. O Angular pode aceitar essas variáveis ​​com

ng-init=""

Usando ";" pode-se ter múltiplas variáveis

Exemplo

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

Eu prefiro empacotar com a variável init do objeto:

<div ng-init="initObject = {initParam: 'initParamValue', anotherOne: 'value'}"></div>
alex.b
fonte
Isso é gênio!
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; };

  });
Indrakiran Reddy
fonte