用户返回时控制器初始化逻辑未命中

时间:2015-04-24 18:14:29

标签: javascript angularjs angular-routing

所以我使用角度制作一个网页,在里面我有标签,在我的页面的主要部分设置ng-view。每次页面加载不同的视图时,我都想运行一些逻辑来设置。我遇到的一个奇怪的问题是,当用户加载网页或刷新时这很好用,但是如果他们转到一个选项卡然后按下浏览器上的后退按钮,则新的ng-view会加载,但控制器逻辑不会被调用再次。我知道控制器正在加载,但控制器根目录中的逻辑没有运行。我已经尝试为stateChangeSuccess和viewContentLoaded添加范围监视,当用户按下时,这两个监视都不会运行。

CONTROLLER

 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主体的顶部并且在每个标签中

APP SETUP

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);
}
]);

1 个答案:

答案 0 :(得分:0)

让我们澄清一些概念:

  • 'RootCtrl'是父控制器,在ngController指令
  • 调用后加载
  • $scope.$watch()会监视任何范围变量,viewContentLoaded不是其中之一,如代码所示。
  • $viewContentLoaded是一个已发出的事件,因此您可以通过$on方法进行监听,每当您更改视图并且视图加载了它的DOM和指令时,它就会发出。

请在RootCtrl控制器上尝试以下代码:

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