Логика инициализации контроллера не срабатывает, когда пользователь возвращается

Итак, я использую angular для создания веб-страницы, и внутри у меня есть вкладки, которые устанавливают ng-view в основной части моей страницы. Каждый раз, когда страница загружает другое представление, я хочу запустить некоторую логику для настройки. Странная проблема, с которой я сталкиваюсь, заключается в том, что это отлично работает, когда пользователь загружает веб-страницу или обновляется, но если они переходят на одну вкладку, а затем нажимают кнопку «Назад» в браузере, загружается новый ng-view, но логика контроллера не вызывается очередной раз. Я знаю, что контроллер загружается, но логика в корне контроллера не выполняется. Я попытался добавить наблюдение за областью для stateChangeSuccess и viewContentLoaded, ни одно из которых не запускается, когда пользователь нажимает назад.

КОНТРОЛЛЕР

 myApp.controller('RootCtrl',  function($scope, $location) {



$scope.$watch('viewContentLoaded', function(){
    Console.log("this is only hit once also");
});

Console.log("this is only hit once");
});

это вводится в верхнюю часть моего тела html и находится на каждой вкладке

НАСТРОЙКА ПРИЛОЖЕНИЯ

myApp = angular.module('myApp', ['ngRoute','ui.bootstrap']);

myApp.config([
'$routeProvider','$locationProvider', function($routeProvider, $locationProvider) {
$routeProvider


    .when('/home',{
      templateUrl: '../templates/home.html',
      controller: 'other'
    })

    .when('/myOtherPage',{
        templateUrl: '../templates/page1.html',
        controller: 'otherCtrl',
        css: 'royaltyOverrides.css'
    })

    .when('/myOtherPage2',{
        templateUrl: '../templates/page2.html',
        controller: 'otherCtrl',
    })
    .otherwise({redirectTo:"/home"}
    );

    $locationProvider.html5Mode(true);
}
]);

person Tomer Shemesh    schedule 24.04.2015    source источник
comment
вам нужно добавить reloadOnSearch: true в свой маршрут   -  person Pankaj Parkar    schedule 24.04.2015
comment
@pankajparkar я только что попробовал, но не повезло. он перезагружает переданный ему контроллер, но не RootController   -  person Tomer Shemesh    schedule 24.04.2015
comment
@pankajparkar У меня есть некоторая логика, которую мне нужно запускать для каждой вещи, и я хотел бы не дублировать код, если можно этого избежать.   -  person Tomer Shemesh    schedule 24.04.2015


Ответы (1)


уточним некоторые понятия:

  • 'RootCtrl' — это родительский контроллер, который загружается после вызова директивой ngController.
  • $scope.$watch() отслеживает любую переменную области видимости, а viewContentLoaded не является одной из их, как показано в вашем коде.
  • $viewContentLoaded — это генерируемое событие, поэтому вы можете прослушивать его с помощью $on метод, и он испускается каждый раз, когда вы меняете представление, и ваше представление загружает его DOM и директивы.

пожалуйста, попробуйте следующий код на контроллере RootCtrl:

$scope.$on('$viewContentLoaded', function(event) {
    // you logic code goes here
});
person ibrahem amin    schedule 01.09.2015