2012-06-11 14 views
5

Bir denetleyici tanımladım ve kapsamda bazı değişkenler var. Denetleyicinin hemen dışındaki bir kapsam değişkenine bir değer atamanın bir yolu olup olmadığını öğrenebilir miyim (ng-model değil)? Ayrıca, denetleyicinin işlevini web sayfasının <script> öğesinin bir yerinde doğrudan (ng-click kullanmak yerine) çağırabilir miyim?Angularjs'de doğrudan denetleyici ve kapsam ile etkileşimde bulunmanın bir yolu var mı?

Teşekkürler!

Alkış, Chris

cevap

11

açısal bir kontrolör tanımı aslında bir sınıf değil, bir nesne olduğunu. HTML'de denetleyiciye başvurulan her yer, derleme aşamasında, tanımlanmış denetleyici sınıfını kullanarak yeni bir denetleyici nesnesi oluşturur. Yani, aynı denetleyici sınıfı ile birden fazla kapsamı başvuruyor olabilirsiniz.

Her zaman denetleyici ile ilişkili bir kapsam vardır ve tüm değişkenler bu kapsamla ilişkilendirilir. Sen sen denetleyici dışından kapsamını erişmeye çalışan neden bize bildirin durumunda da iyi olurdu

var scope = angular.element("#myelement").scope(); 
//use the scope.... 

gibi bir şey arayarak belirli bir html elemanı kapsamını erişebilir.

GÜNCELLEME

Bu önyükleme sekme bileşeni ... Sen

<tab> 
<pane title="tab1"><pane> 
<pane title="tab2"></pane> 
</tabs> 

Bu http://angularjs.org/ ana sayfada bulunan aynı biridir olarak kullanabilirsiniz edilir .. ben sadece güncelledik Bir sekme değiştiğinde olayları yayınlamak için.

var directives = angular.module('myApp.directives', []); 
directives.directive('tabs', function() { 
    return { 
     restrict:'E', 
     transclude:true, 
     scope:{}, 
     controller:function ($scope, $element, $rootScope) { 
      var panes = $scope.panes = []; 

      $scope.select = function (pane) { 
       angular.forEach(panes, function (pane) { 
        pane.selected = false; 
       }); 
       pane.selected = true; 
       $rootScope.$broadcast("tabChanged", pane.title); 
      } 

      this.addPane = function (pane) { 
       if (panes.length == 0) $scope.select(pane); 
       panes.push(pane); 
      } 
     }, 
     template:'<div class="tabbable">' + 
      '<ul class="nav nav-tabs">' + 
      '<li ng-repeat="pane in panes" ng-class="{active:pane.selected}">' + 
      '<a href="" ng-click="select(pane)">{{pane.title}}</a>' + 
      '</li>' + 
      '</ul>' + 
      '<div class="tab-content" ng-transclude></div>' + 
      '</div>', 
     replace:true 
    }; 
}); 
directives.directive('pane', function() { 
    return { 
     require:'^tabs', 
     restrict:'E', 
     transclude:true, 
     scope:{ title:'bind' }, 
     link:function (scope, element, attrs, tabsCtrl) { 
      tabsCtrl.addPane(scope); 
     }, 
     template:'<div class="tab-pane" ng-class="{active: selected}" ng-transclude>' + 
      '</div>', 
     replace:true 
    }; 
}); 

Bu sekme değişiklikleri ..

+0

Temelde ben angularjs ve ön yükleme alanı kullanmak istediğinizde bir olay gönderir aynı anda (sekme JavaScript bileşeni). REST mimarisini uyguladım ve kullanıcılar farklı bir sekme panosuna geçtiğinde kaynakları almak istiyorum. Bu yüzden sekme değişiklik olayına bağlanmam ve buralı web hizmetinden almak için denetleyicinin işlevini çağırmam gerekiyor. Ayrıca, dinlendirici web hizmetinden alınırken bir kullanıcı kimliği belirtmem gerekiyor. Kullanıcı kimliğini ilk başta sabitledim ancak denetleyicide veya js dosyasındaki kapsamı zorlamak istemiyorum. – Chris

+0

Bu yüzden, kapsam ve çağrı denetleyicisinin işlevine (kullanıcı tarafından gizlenen web hizmetinden veri al) dışarıdan değişken (kullanıcı Kimliği) ayarlamam gerekiyor. Bunun nasıl başarılabileceğine dair bir fikrin var mı? Teşekkürler! – Chris

+0

Mümkünse, tüm yönergelerin özel yönergeyi desteklemediği gibi özel yönergeyi kullanmaktan kaçınmak istiyorum. Ama fikrin için teşekkürler. – Chris

İlgili konular