Pracuję przy użyciu Angular 1.5.8 i maszynopisu Mam dyrektywę, która jest używana w ramach innej dyrektywy (i oczywiście innego kontrolera). Powiedzmy, że dyrektywa1, kontroler1 i dyrektywa2, kontroler2. Biorąc pod uwagę, że kontroler1 ma już informacje o użytkowniku, chciałbym przekazać te informacje użytkownika do kontrolera2 za pośrednictwem dyrektywy2, aby zapobiec ponownemu pobieraniu informacji z zaplecza. Nie jestem pewien, czy można to zrobić, ale byłoby miło, gdyby to przypadek :)Kątowa dyrektywa odbierająca obiekt jako atrybut za pomocą maszynopisu
Poniżej znajduje się kod, aby pomóc mojemu wyjaśnienie:
dyrektywy1 HTML:
<div>
...
<directive2 user="{{ctrl.loggedUser}}"></directive2>
...
</div>
loggedUser jest ładowany do konstruktora Controller1 poprzez wywołanie backendu.
kod dyrektywy2 i Directive2Ctrl Typescript:
class Directive2 implements ng.IDirective {
controller = "Directive2Ctrl";
controllerAs = "d2Ctrl";
bindToController = {
user: "@"
};
restrict = "E";
templateUrl = "directive2.html";
static factory(): ng.IDirectiveFactory {
const directive =() => new Directive2();
return directive;
}
}
angular
.module("app")
.controller("Directive2Ctrl", Directive2Ctrl)
.directive("directive2", Directive2.factory());
class Directive2Ctrl implements IDirective2Ctrl {
public user: User;
constructor(user: User) {
// user is undefined
}
$onInit(user: User): void {
// user is undefined
}
}
nie mogłem znaleźć sposób na przekazanie obiektu użytkownika do Directive2Ctrl (nawet nie wiem, czy to jest możliwe).
Należy 'user =„ctrl.loggedUser”' w widoku (bez nawiasów klamrowych) i 'użytkownika: "=" 'w definicji bindToController (zamiast @) –
Czy powinienem używać zakresu w kontrolerze lub dyrektywie?A może powinien działać bez potrzeby korzystania z zakresu? – gmesorio
Nie, nie musisz używać tego zakresu jawnie, jeśli używasz wiązania do składni kontrolera. –