2012-11-01 12 views
6

Biorąc pod uwagę to prosty moduł kątowy:kątowa: Jak uzyskać dostęp do elementu zakresu dyrektywę w kontrolerze

angular.module('fixturesModule', []) 
.directive('clubfixtures', function() { 
    "use strict"; 
    return { 
     restrict: 'E', 
     replace: true, 
     transclude: true, 
     scope: { 
      club : "@club", 
      max : "@max" 
     }, 

    templateUrl: "ClubResultsTemplate.html", 

    controller: function ($scope, $http) { 

     $http.get("data.json").success(function (data) { 
      $scope.results = data; 
     }); 

     $scope.sortBy = "Date"; 

    } 
} 
}); 

Jak mogę uzyskać dostęp do klubu i max w funkcji regulatora?

Dzięki, Jeff

+1

W którym funkcja kontrolera? W funkcji kontrolera dla dyrektywy? Lub w funkcji kontrolera dla rodzica dyrektywy? –

+0

korzystać z usługi udostępniania? – maxisam

+0

W 'funkcji ($ scope, $ http)' przypisanej do 'kontrolera' pokazanej w powyższym przykładzie. W szczególności wartość 'club' będzie stanowić część ścieżki w' $ http.get' – jeffeld

Odpowiedz

5

2 wymienione zmienne (max i club) będzie po prostu zdefiniowane w zakresie wtryskiwanego do kontrolera dyrektywy. Oznacza to, że możesz napisać:

controller: function ($scope, $http) { 

     $scope.max; //do sth with $scope.max 
     $scope.club //so sth with $scope.club 

     $http.get("data.json").success(function (data) { 
      $scope.results = data; 
     }); 
} 

w kontrolerze twojej dyrektywy.

Jeśli chcesz przeczytać więcej, sugerowałbym "Definicyjny obiekt dyrektywy" w http://docs.angularjs.org/guide/directive, gdzie mówi o zakresach w dyrektywach.

+1

Dzięki za poświęcenie czasu na odpowiedź. Jednak gdy dodaję 'console.log ($ scope.club);' do funkcji kontrolera, po prostu jako wynik wyprowadzam niezdefiniowane. – jeffeld

+0

Powinno działać. powinieneś skonfigurować plunkera http://plnkr.co/ – maxisam

+1

Potrzebowałbym więcej kodu, aby pomóc, w szczególności, w jaki sposób dyrektywa jest używana w HTML i jakie dane są dostępne w zakresie, w którym są używane. Czy sądzisz, że możliwe byłoby dostarczenie jsFiddle/plunk z kodem na żywo? –

10

Atrybuty w zakresie ustawionym za pomocą "@", jak w scope: { myAttr: '@' }, otrzymują po po wywołaniu funkcji kontrolera ich wartości.

Można to wykazać za pomocą prostego setTimeout - Zobacz http://jsfiddle.net/Q4seC/ (należy otworzyć konsolę)

$ attrs, jak już stwierdzono, jest gotowy, kiedy jest to potrzebne.

Co ciekawe, jeśli używasz „=” zamiast „@”, to jest wartość nie jest gotowy i dostępny, co sprawia mi, że to może być uznane za błąd w kątowa ...

+0

To jest poprawna odpowiedź. Dzięki! –

+0

Tak też myślałem. Dzięki za posprzątanie tego za mnie. – GFoley83

+0

+1, ponieważ jest to najbardziej przydatna odpowiedź, chociaż nadal nie potwierdza, dlaczego te właściwości zakresu są niezdefiniowane w punkcie funkcji kontrolera. Potwierdzony jako błąd? Więcej informacji? –

Powiązane problemy