所以我使用角度制作一个网页,在里面我有标签,在我的页面的主要部分设置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);
}
]);
答案 0 :(得分:0)
'RootCtrl'
是父控制器,在ngController
指令$scope.$watch()
会监视任何范围变量,viewContentLoaded
不是其中之一,如代码所示。$viewContentLoaded
是一个已发出的事件,因此您可以通过$on
方法进行监听,每当您更改视图并且视图加载了它的DOM和指令时,它就会发出。请在RootCtrl
控制器上尝试以下代码:
$scope.$on('$viewContentLoaded', function(event) {
// you logic code goes here
});