Khai báo nhiều giá trị trong ng-init


85

Vì vậy, tôi tự hỏi làm thế nào tôi có thể khai báo nhiều giá trị trong một ng-init duy nhất mà không cần phải tạo một số băm kỳ lạ, sau đó tôi cần phải luôn truy cập cụ thể.

vì vậy về cơ bản tôi muốn

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

và tôi đang nói rằng tôi muốn tránh phải làm

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

Tuy nhiên hợp lý:

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

dường như không hoạt động.

Cảm ơn đã dự đoán


"a = 1, b = 2"sẽ không được hợp lý kể từ javascript của nó, và dấu chấm phẩy là những người báo cáo riêng biệt, nhưng ý tưởng giữ cùng
Bernardo Dal Corno

Câu trả lời:


144

Sử dụng một hàm, cách dễ đọc hơn:

ng-init="init()"

Và:

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

Hoặc, nếu bạn phải, hãy phân tách các biến nội tuyến bằng dấu chấm phẩy:

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

7
điều này sẽ không làm việc cho ng-repeat, vì nó có phạm vi riêng của mình thấy jsfiddle.net/U3pVM/13212
Toolkit

@Toolkit sử dụng ký hiệu dấu chấm (cú pháp controllerAs) để tham chiếu một hàm bên ngoài phạm vi cô lập của một ng-repeat. chuyển $ index var được xác định trước của một ng-repeat cho một hàm được gọi từ khung nhìn.
trickpatty

Đánh giá bắt đầu từ phía nào? Ví dụ: nếu tôi muốn sử dụng một biến trong một câu lệnh khác, Tôi nên viết câu lệnh của mình như thế nào? ví dụ: ng-init = "a = 12; b = 1 + a" hoặc init = "b = 1 + a; a = 12;"? nó đánh giá từ bên trái là javascript?
Pooya

@ Пуя - Tôi sẽ cho là như vậy. Bạn có thể kiểm tra nó: ng-init="c = a + b; a = 1; b = 2"và xem kết quả clà gì - Dự đoán tốt nhất, nó đi từ trái sang phải.
tymeJV

39

Đôi khi không lý tưởng để đặt các biến trong một hàm. Ví dụ: chương trình phụ trợ của bạn ở dạng express và bạn đang kết xuất một tệp bằng ngọc bích.

Với Express.js, bạn có thể gửi các biến cục bộ tới html. Angular có thể chấp nhận các biến này với

ng-init=""

Sử dụng ";" một người có thể có nhiều biến

Thí dụ

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

8

Tôi thích bọc với biến init đối tượng:

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

Đây là thiên tài!
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; };

  });
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.