<div ng-view></div> </div> <script type="text/ng-template" id="/a"> //SomeHtml with Angular templates </script> <script"> <div ng-view></div> </div> <script type="text/ng-template" id="/a"> //SomeHtml with Angular templates </script> <script"> <div ng-view></div> </div> <script type="text/ng-template" id="/a"> //SomeHtml with Angular templates </script> <script" />

Как использовать контроллер AngularJS, который уже существует при изменении маршрута?

У меня есть этот html:

<div ng-controller="MyCtrl">
  <div ng-view></div>
</div>

<script type="text/ng-template" id="/a">
 //SomeHtml with Angular templates
</script>

<script type="text/ng-template" id="/b">
 //SomeHtml with Angular templates
</script>

А также:

angular.module('ngView', [], function($routeProvider, $locationProvider) {
  $routeProvider.when('/a', {
    templateUrl: '/a',
    controller: MyCtrl
  });

  $routeProvider.when('/b', {
    templateUrl: '/b',
    controller: MyCtrl
  });
});

Контроллер «MyCtrl» имеет некоторый код начальной загрузки, который вызывается при первом загрузке html, этот код начальной загрузки устанавливает некоторое состояние, которое должно использоваться шаблонами «/ a» и «/ b». Шаблоны «/ a» и «/ b» будут представлять данные, полученные во время загрузки, для рендеринга по-разному.

Я бы не хотел иметь контроллер и по-прежнему иметь доступ к области MyCtrl из моих шаблонов.

1
nl ja de
Я не понимаю этого вопроса. У вас есть два маршрута, которые контролируются одним и тем же контроллером, в чем проблема?
добавлено автор akonsu, источник

3 ответы

I would remove the wrapping controller, and have my routes each have their own controller. If these controllers need shared data then I would add a dedicated object that holds these data to the controllers' dependency lists. Here is an example: https://stackoverflow.com/a/9407953/410102

2
добавлено
насколько я знаю, услуги - это синглеты в angularjs. Я бы определил службу, которая содержит общие данные и использует их.
добавлено автор akonsu, источник
Это звучит неплохо, но есть способ установить время жизни зависимости? Аналогично, в других контейнерах DI я хотел бы установить компонент, который будет областью приложения и тому подобное, таким образом, я мог бы загрузить его в нужное время и ввести его для использования полученных данных.
добавлено автор Jayr Motta, источник

Рядом с сайтом «Угловой» говорится, что вы должны указать какой-то контроллер, который вам не нужен, и если тег с атрибутом ng-view заключен в другой тег, который имеет ng-controller , тогда созданный шаблон сможет получить доступ к родительской области, как обычно.

1
добавлено

Контроллер шаблонов будет иметь родительский контроллер (ваш так называемый контроллер упаковки), который он наследует. Таким образом, вы можете выполнять функции и получать доступ к свойствам вашего контроллера упаковки.

function TemplateAController($scope) {
 ...
}

function WrappingController($scope) {
   $scope.execute = function() {
      ...
   }
    ...
   }

В вашем шаблоне:

Execute
0
добавлено
Angular — русскоговорящее сообщество
Angular — русскоговорящее сообщество
3 960 участник(ов)

Общаемся на темы Angular 4+, его экосистемы, TypeScript, NativeScript и т.д. По вопросам SSR, Angular Universal @angular_universal_ru См. также: @typescript_ru, @react_js, @nodejs_ru, @js_ru Вакансии и поиск работы: @javascript_jobs

Angular.js (1.x) — русскоговорящее сообщество
Angular.js (1.x) — русскоговорящее сообщество
704 участник(ов)

Общаемся и обсуждаем темы, посвященные Angular 1.x и экосистеме.

AngularJS, Javascript
AngularJS, Javascript
370 участник(ов)

Angularjs russian chat