Deklarieren Sie mehrere Werte in ng-init

84

Ich frage mich also, wie ich mehrere Werte innerhalb eines einzigen ng-init deklarieren kann, ohne einen seltsamen Hash erstellen zu müssen, auf den ich dann immer spezifisch zugreifen muss.

also grundsätzlich möchte ich

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

und ich sage, dass ich es vermeiden möchte, tun zu müssen

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

Jedoch das Vernünftige:

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

scheint nicht zu funktionieren.

Voraussichtlicher Dank

Cosmin
quelle
"a = 1, b = 2"wäre nicht vernünftig, da sein Javascript und Semikolons diejenigen sind, die Aussagen trennen, aber die Idee gilt auch
Z. Khullah

Antworten:

143

Verwenden Sie eine Funktion, die viel besser lesbar ist:

ng-init="init()"

Und:

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

Oder, wenn Sie müssen, trennen Sie Inline-Variablen mit einem Semikolon:

ng-init="a = 1; b = 2"
tymeJV
quelle
7
Dies wird nicht für ng-repeat funktionieren, da es einen eigenen Bereich hat, siehe jsfiddle.net/U3pVM/13212
Toolkit
@Toolkit verwendet die Punktnotation (controllerAs-Syntax), um auf eine Funktion außerhalb des isolierten Bereichs einer ng-Wiederholung zu verweisen. Übergeben Sie die vordefinierte $ index var einer ng-repeat an eine aus der Ansicht aufgerufene Funktion.
Trickpatty
Von welcher Seite beginnt die Bewertung? Wenn ich beispielsweise eine Variable in einer anderen Anweisung verwenden möchte, wie soll ich meine Anweisung schreiben? Beispiel: ng-init = "a = 12; b = 1 + a" oder init = "b = 1 + a; a = 12;"? Wird es von links als Javascript ausgewertet?
Pooya
@ Пуя - das würde ich annehmen. Sie können es testen: ng-init="c = a + b; a = 1; b = 2"und sehen, was das Ergebnis cist - am besten raten Sie, es geht von links nach rechts.
TymeJV
38

Manchmal ist es nicht ideal, die Variablen in eine Funktion einzufügen. Zum Beispiel ist Ihr Backend in Express und Sie rendern eine Datei mit Jade.

Mit Express.js können Sie lokale Variablen an den HTML-Code senden. Angular kann diese Variablen mit akzeptieren

ng-init=""

Verwenden von ";" man kann mehrere Variablen haben

Beispiel

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

Ich bevorzuge Wrap mit Objekt-Init-Variable:

<div ng-init="initObject = {initParam: 'initParamValue', anotherOne: 'value'}"></div>
alex.b
quelle
Das ist Genie!
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>

UND

  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
quelle