2016-03-26 15 views
2

AngularJS denetleyicimde bir kapsam değişkeni olarak son derece hiyerarşik JSON yapısına sahibim. Bu değişkenin farklı bölümleri etrafında dolaşmak istiyorum. Yaptığım yapıyı belirtmek için ng-init kullanmayı düşündüm.AngularJS: Açıkça anlamıyorum ng-init kullanımını anlamadım

my_app.js: İşte bazı kod

(function() { 
    var app = angular.module("my_app"); 
    app.controller("MyController", [ "$scope", function($scope) { 
    $scope.things = { 
     name: "a", 
     children: [ 
     { 
      name: "a.a", 
      children: [ 
      { name: "a.a.a" }, 
      { name: "a.a.b" } 
      ] 
     }, 
     { 
      name: "a.b", 
      children: [ 
      { name: "a.b.a" }, 
      { name: "a.b.b" } 
      ] 
     } 
     ] 
    } 
    }]); 
}); 

my_template.html:

    :

    <div ng-app="my_app" ng-controller="MyController"> 
        <ul> 
        <li ng-init="current_thing=things.children[0]" ng-repeat="thing in current_thing.children> 
         {{ thing.name }} 
        </li> 
        </ul> 
    </div> 
    

    Bunun bir listesini görüntülemek için beklenir

a.a.b

  • a.a.a Ama hiçbir şey göstermez.

    Elbette, döngüyü açıkça belirtirsem (ng-repeat="thing in things.children[0].children"), gayet iyi çalışıyor. Ancak şablon kodunun bu küçük pasajı, uygulamamın çeşitli noktalarında çeşitli şeylerde çalıştırılmalıdır.

    (Sadece Django zeka yoluyla başka standart JavaScript veya kullanarak mevcut şey seviyesini alabilirsiniz, hayat karmaşık hale getirmek için.)

    Herhangi bir fikir?

    cevap

    4

    ng-initng-repeat'dan (1000) daha düşük bir öncelikte (450) çalışır. Sonuç olarak, aynı öğeye yerleştirildiğinde, ng-repeat derlenir, ilk olarak ng-init tarafından oluşturulan kapsam özelliği ng-repeat yürütüldükten sonra tanımlanmayacaktır.

    Sonuç olarak, bu şekilde kullanmak isterseniz, bunun yerine ana öğeye yerleştirmeniz gerekir.

    <div ng-app="my_app" ng-controller="MyController"> 
        <ul ng-init="current_thing=things.children[0]"> 
        <li ng-repeat="thing in current_thing.children> 
         {{ thing.name }} 
        </li> 
        </ul> 
    </div> 
    
    +0

    Teşekkür ederiz. Bu oyuncak örneğini düzeltti. Yine de gerçek kodda çalışmıyor. Biraz daha düşünmem gerekiyor ve belki sana döneceğim. – trubliphone

    +0

    Zevklerim. İlkeler aynı olmalıdır. Bununla birlikte, ng-init bir maliyetle geliyor ve büyük ölçüde hata ayıklama olduğunu unutmayın. Bir destek denetleyicisinde uygun veri yapıları üzerinde ng-init hata ayıklaması çok daha zordur. –

    İlgili konular