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"그것의 자바 스크립트 이후로 합리적이지 않을 것이고 세미콜론은 문장을 분리하는 사람들이지만 아이디어는 똑같습니다
Bernardo Dal Corno

답변:


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의 격리 범위 밖에있는 함수를 참조합니다. ng-repeat의 미리 정의 된 $ index var를 뷰에서 호출 된 함수에 전달합니다.
trickpatty

평가는 어느 쪽에서 시작됩니까? 예를 들어 다른 문에서 변수를 사용하려는 경우 문을 어떻게 작성해야합니까? 예 : ng-init = "a = 12; b = 1 + a"또는 init = "b = 1 + a; a = 12;"? 왼쪽에서 자바 스크립트로 평가됩니까?
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 2017

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; };

  });
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.