Объявить несколько значений в ng-init


85

Поэтому мне интересно, как я могу объявить несколько значений в одном ng-init без необходимости создавать какой-то странный хеш, к которому тогда мне нужно всегда обращаться конкретно.

так в основном я бы хотел

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

и я говорю, что я бы не хотел делать

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

Однако разумные:

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

похоже не работает.

Ожидаемая благодарность


"a = 1, b = 2"было бы неразумно, так как это javascript, а точки с запятой - это те, которые разделяют утверждения, но идея
Бернардо Даль Корно

Ответы:


144

Используйте функцию, более читаемую:

ng-init="init()"

А также:

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

Или, если необходимо, разделите встроенные переменные точкой с запятой:

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

7
это не сработает для ng-repeat, так как у него есть своя область видимости, см. jsfiddle.net/U3pVM/13212
Toolkit

@Toolkit использует точечную нотацию (синтаксис controllerAs) для ссылки на функцию за пределами изолированной области ng-repeat. передать предопределенный $ index var ng-repeat функции, вызываемой из представления.
trickpatty

С какой стороны начинается оценка? например, если я хочу использовать переменную в другом операторе, как мне написать свой оператор? Пример: ng-init = "a = 12; b = 1 + a" или init = "b = 1 + a; a = 12;"? оценивается ли он слева как javascript?
Pooya

@ Пуя - Думаю, да. Вы можете проверить это: ng-init="c = a + b; a = 1; b = 2"и посмотреть, каков результат c- Лучшее предположение, он идет слева направо.
tymeJV

39

Иногда не идеально помещать переменные в функцию. Например, ваш бэкэнд находится в экспресс-режиме, и вы визуализируете файл с помощью jade.

С Express.js вы можете отправлять локальные переменные в html. Angular может принимать эти переменные с

ng-init=""

С помощью ";" можно иметь несколько переменных

пример

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

8

Я предпочитаю перенос с переменной инициализации объекта:

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

Это гениально!
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>

А ТАКЖЕ

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

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

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

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

  });
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.