/ / Jak używać tego samego kontrolera i tego samego widoku wiele razy na stronie - angularjs

Jak korzystać z tego samego kontrolera i tego samego widoku wiele razy na stronie - angularjs

Staram się stworzyć aplikację na jednej stronie, na której jachcę ładować ekrany (częściowe widoki) przez ajax. Problem polega na tym, że użytkownik chce wielokrotnie otwierać ten sam ekran (w zakładkach). Próbowałem załadować kod kontrolera przy początkowym ładowaniu i załadowałem moje ekrany (widoki częściowe) przez AJAX. Ale kontroler jest już wykonywany przez czas ładowania ekranu (widok częściowy).

Chcę wiedzieć, jak uruchomić kontroler po załadowaniu widoku częściowego?

Albo jeszcze lepiej, jak poradzić sobie z tą sytuacją, gdy chcę załadować ten sam widok wiele razy z różnymi danymi / stanem?

Odpowiedzi:

0 dla odpowiedzi № 1

Znalazłem rozwiązanie problemu, z którym miałem do czynienia. Nie jestem pewien, czy jest to najlepszy sposób, aby iść naprzód, ale biorąc pod uwagę ograniczoną do tej pory wiedzę na temat AngularJS, to rozwiązanie jest moim najlepszym rozwiązaniem. Jeśli ktoś może wymyślić lepsze rozwiązanie, jestem cały w uszach.

Zamiast rejestrować kontroler z góry, rejestruję kontroler, gdy żądany jest widok.

Dołączam także nowy div do kontenera, w którym chcę wyświetlić widok. Na stronie znajduje się jQuery, która ukrywa inne widoki i pokazuje tylko bieżący widok.

Krok 1

Przydzielony $controllerProvider.register do zmiennej w zakresie aplikacji

var myApp = angular.module("myApp", []);
angular.module("myApp").config(function ($controllerProvider) {
myApp.registerCtrl = $controllerProvider.register;
});

Krok 2

W funkcji, w której muszę dynamicznie ładować widok, wykonałem następujące czynności

$("#viewContainer").append($compile("<div ng-include="pageUrl"></div>")($scope));

Powyższa linia dodaje div z ng-include dyrektywa. Kompiluje także dyrektywę. The pageUrl to gdzie trzymam adres URL w widoku, który chcę uwzględnić.

Krok 3

W pliku widoku, który muszę załadować, muszę dołączyćPlik JavaScript, który przechowuje mój kontroler. Reszta pliku zawiera prosty kod HTML z dyrektywami. W pliku JS zamiast tworzyć kontroler, rejestruję kontroler jak

angular.module("myApp").registerCtrl("MyController", MyController);

Mam nadzieję, że jest to pomocne dla innych.