Оголосіть кілька значень у 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 використовує крапкові позначення (синтаксис controllerAs) для посилання на функцію поза межами ізоляції ng-повтору. передайте попередньо визначений $ 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

Я віддаю перевагу обтіканню змінною init об'єкта:

<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.