2013-09-21 17 views
13

Próbuję umieścić pewne dane w zakresie, który moja dyrektywa tworzy. Oto mój jsFiddle.kontroler angularjs w dyrektywie za pomocą kontrolera. Czy nie działa?

następujący kod działa dobrze

.directive('directive1', function() { 
    return: { 
     scope: true, 
     controller: function ($scope) { 
      $scope.name = 'world'; 
     } 
    } 
}) 

<div directive1> 
    <p>{{ name }}</p> 
</div> 

ale to kod nie działa

.directive('directive2', function() { 
    return: { 
     scope: true, 
     controller: function() { 
      this.name = 'world'; 
     }, 
     controllerAs: 'testCtrl' 
    } 
}) 

<div directive2> 
    <p>{{ testCtrl.name }}</p> 
</div> 

Czy jest coś złego w moim kodu? lub czy źle zrozumiałem coś o controllerAs?

+0

Nie wiem, czy możesz to zrobić. Zdefiniowałeś kontroler bez '$ scope'. Czym jest "controllerAs"? –

+1

@MaximShoustin [angular1.2 docs] (http://docs.angularjs.org/guide/directive), nowa funkcja dla dyrektywy – user2331095

+1

Dobrze wiedzieć :) –

Odpowiedz

16

ControllerAs obsługuje dyrektywy was added in 1.2.0, więc będziesz musiał użyć najnowszej wersji zamiast 1.0.2 z połączonego fiddle. This way działa tak, jak chciałeś.

+0

Masz rację. Po migracji do wersji kątowej 1.2 działa dobrze. dzięki ~! – user2331095

-1

Proszę nie mylić z kontrolerem dyrektywy i zwykłym kontrolerem! Więc tak, reżyser może mieć kontroler, który kontroluje coś. Ale to nie jest odpowiednik normalnego kontrolera!

W rzeczywistości nie ma problemu z umieszczeniem logiki dyrektywy w sterowniku dyrektywy, ale w rzeczywistości kontroler dyrektywy jest używany do komunikacji między dyrektywami. Instancja kontrolera jednej dyrektywy może zostać wprowadzona do innej dyrektywy, która znajduje się na tym samym elemencie (lub elementach potomnych).

Wyrażenie "kontroler jako" dotyczy normalnych kontrolerów. Po prostu zrób sobie przysługę i umieść swoją logikę w funkcji łączenia dyrektyw.

+0

Dzięki za szczegóły kontrolera! Właściwie to mylę się ze zwykłym kontrolerem i kontrolerem dyrektywy. Dzięki jeszcze raz! – user2331095

+13

Ta odpowiedź wprowadza w błąd - kontroler dyrektywy ** jest ** taki sam jak zwykły kontroler, z tym wyjątkiem, że zamiast być tworzony przez dyrektywę 'ngController', jest tworzony przez dyrektywę, z którą jest powiązany. Działa to samo, wstrzykiwania, "controllerAs", wszystko. Logika może/powinna być kontrolerem dyrektywy - funkcja łącza powinna być przede wszystkim używana do manipulacji DOM. –

Powiązane problemy