Zadeklaruj wiele wartości w ng-init


85

Zastanawiam się więc, jak mogę zadeklarować wiele wartości w jednym ng-init, bez konieczności tworzenia dziwnego skrótu, do którego zawsze muszę mieć dostęp.

więc w zasadzie chciałbym

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

i mówię, że chciałbym uniknąć konieczności robienia tego

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

Jednak rozsądne:

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

nie wydaje się działać.

Oczekiwane dzięki


"a = 1, b = 2"nie byłoby rozsądne, ponieważ zawiera javascript, a średniki to te, które oddzielają oświadczenia, ale idea jest taka sama
Bernardo Dal Corno

Odpowiedzi:


144

Użyj funkcji, o wiele bardziej czytelnej:

ng-init="init()"

I:

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

Lub, jeśli musisz, oddziel zmienne w wierszu średnikiem:

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

7
to nie zadziała dla ng-repeat, ponieważ ma swój własny zakres patrz jsfiddle.net/U3pVM/13212
Toolkit

@Toolkit używa notacji kropkowej (składnia kontroleraAs), aby odwołać się do funkcji spoza izolowanego zakresu powtórzenia ng. przekazać predefiniowaną zmienną $ index var powtórzenia ng do funkcji wywołanej z widoku.
trickpatty

Z której strony zaczyna się ocena? na przykład, jeśli chcę użyć zmiennej w innym oświadczeniu, jak mam napisać oświadczenie? np .: ng-init = "a = 12; b = 1 + a" lub init = "b = 1 + a; a = 12;"? czy ocenia od lewej jako javascript?
Pooya,

@ Пуя - tak sądzę. Możesz to przetestować: ng-init="c = a + b; a = 1; b = 2"i zobaczyć, jaki jest wynik c- Zgadnij, idzie od lewej do prawej.
tymeJV

39

Czasami umieszczanie zmiennych w funkcji nie jest idealnym rozwiązaniem. Na przykład twój backend jest w trybie ekspresowym i renderujesz plik przy użyciu jade.

Za pomocą Express.js możesz wysyłać zmienne lokalne do html. Angular może akceptować te zmienne z

ng-init=""

Za pomocą ";" można mieć wiele zmiennych

Przykład

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

8

Wolę zawijać zmienną init obiektu:

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

To jest genialne!
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>

I

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

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

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

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

  });
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.