2014-12-18 24 views
7

önce yönergesi yükleme ı $ http $ kapsam içine bir değişken yükleme diyelim yükleniyor, ancak yönergem yüklenen teacher.students dizisine bağlı olan bir kod içeriyor:angularjs verilerine

app.directive('studentsView', function(){ 
    return { 
    scope: { students: '=' }, 
    controller: function($scope){ 
     _.each($scope.students, function(s){ 
     // this is not called if teacher loads after this directive 
     }); 
    } 
    }; 
}); 

Nasıl yapabilirim Burada istediğim davranışı al $ Http kullanarak durmak istemiyorum ve mümkünse kapsam için bir söz vermek zorunda kalmak istemiyorum.

+0

Döngüde neler oluyor? Bu döngüyü bir hizmete yardımcı olan veya bu hizmete götüren bu geri bildirimin içine bu döngü koyabilir miyim? – charlietfl

cevap

20

students ürününü kullanabilmek için bir saat kullanın. Uygun olduğunda, ona bağlı olan kodu çağırırsınız, ardından saati kaldırırsınız. Kodun her zaman students değişikliklerini yürütmesini istiyorsanız saati kaldırarak atlayabilirsiniz.

app.directive('studentsView', function(){ 
    return { 
    scope: { students: '=' }, 
    controller: function($scope){ 
     scope.$watch('students', function(newValue, oldValue) { 
     _.each($scope.students, function(s){ 
      // this is not called if teacher loads after this directive 
     });  
     }; 
    } 
    }; 
}); 

Daha $watch tarih::

app.directive('studentsView', function(){ 
    return { 
    scope: { students: '=' }, 
    link: function($scope){ 
     var unwatch = $scope.$watch('students', function(newVal, oldVal){ 
     // or $watchCollection if students is an array 
     if (newVal) { 
      init(); 
      // remove the watcher 
      unwatch(); 
     } 
     }); 

     function init(){ 
     _.each($scope.students, function(s){ 
      // do stuff 
     }); 
     } 
    } 
    }; 
}); 
+0

Bu kodu denetleyici işlevine koyma ve onu bağlantı işlevine koyma arasındaki fark nedir? – Dave

+2

@Dave DOM derleme işleminde, yönerge denetleyicileri bağlantı işlevlerinden önce örneklenir, bu nedenle bağlantı işlevleri esasen son/kararlı durum üzerinde etkili olarak görülebilir. Angular dokümanlar, bir API'yi diğer yönergelere göstermek istediğinizde [_controller kullanmanızı önerir. Aksi halde link kullanın] (https://docs.angularjs.org/guide/directive#summary) _. Bazıları tersine tartışır: [Bir direktif tanımlarken 'kontrolör', 'link' ve 'compile' fonksiyonları arasındaki fark] (http://stackoverflow.com/a/12570008/2943490). Sadece, söz konusu siparişin kullanım durumunuz için önemli olup olmadığına bağlıdır. – user2943490