Ng-init'te birden fazla değer bildirin


85

Bu yüzden, garip bir hash oluşturmak zorunda kalmadan, tek bir ng-init içinde birden çok değeri nasıl beyan edebileceğimi merak ediyorum, o zaman her zaman özel olarak erişmem gerekiyor.

yani temelde isterim

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

ve yapmak zorunda kalmaktan kaçınmak istediğimi söylüyorum

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

Ancak makul olan:

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

işe yaramıyor gibi görünüyor.

Beklenen Teşekkürler


"a = 1, b = 2"javascript olduğundan mantıklı olmaz ve noktalı virgüller ifadeleri ayıranlardır, ancak fikir aynıdır
Bernardo Dal Corno

Yanıtlar:


144

Daha okunaklı bir işlev kullanın:

ng-init="init()"

Ve:

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

Veya gerekirse, satır içi değişkenleri noktalı virgülle ayırın:

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

7
kendi kapsamı olduğu için bu ng-tekrar için çalışmayacaktır bkz. jsfiddle.net/U3pVM/13212
Toolkit

@Toolkit, bir ng-tekrarının yalıtım kapsamı dışındaki bir işlevi referans almak için nokta notasyonu (controllerAs sözdizimi) kullanır. bir ng-tekrarının önceden tanımlanmış $ indeks değişkenini görünümden çağrılan bir işleve geçirin.
trickpatty

Değerlendirme hangi taraftan başlar? örneğin bir değişkeni başka bir ifadede kullanmak istersem, ifademi nasıl yazmalıyım? ör: ng-init = "a = 12; b = 1 + a" veya init = "b = 1 + a; a = 12;"? soldan javascript olarak değerlendiriliyor mu?
Pooya

@ Пуя - Öyle olduğunu varsayıyorum. Test edebilirsiniz: ng-init="c = a + b; a = 1; b = 2"ve sonucunun ne olduğunu görebilirsiniz c- En iyi tahmin, soldan sağa gider.
tymeJV

39

Bazen değişkenleri bir işleve koymak ideal değildir. Örneğin, arka ucunuz hızlı ve yeşim kullanarak bir dosya oluşturuyorsunuz.

Express.js ile yerel değişkenleri html'ye gönderebilirsiniz. Angular bu değişkenleri kabul edebilir

ng-init=""

";" Kullanarak birden çok değişken olabilir

Misal

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

8

Object init değişkeniyle sarmayı tercih ederim:

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

Bu dahice!
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>

VE

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

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

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

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

  });
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.