我有一个
<离子侧菜单>与链接到我的页面定义在这里:
app.config(function($stateProvider, $urlRouterProvider, $ionicConfigProvider) {
$stateProvider.state('content', {
url: "/content",
abstract: true,
templateUrl: "templates/sidemenu.html",
controller: 'SideController'
});
$stateProvider.state('content.home', {
url: "/home",
views: {
'menuContent': {
templateUrl: "templates/home.html",
controller: "HomeController"
}
}
});
$stateProvider.state('content.nearby', {
url: "/nearby",
views: {
'menuContent': {
templateUrl: "templates/nearby.html",
controller: "NearbyController"
}
}
});
$stateProvider.state('content.map', {
url: "/map",
views: {
'menuContent': {
templateUrl: "templates/map.html",
controller: "MapController"
}
}
});
$stateProvider.state('content.radar', {
url: "/radar",
views: {
'menuContent': {
templateUrl: "templates/radar.html",
controller: "RadarController"
}
}
});
$stateProvider.state('content.location-details', {
url: "/location-details/:index",
views: {
'menuContent': {
templateUrl: "templates/location-details.html",
controller: "DetailsController"
}
},
resolve: {
currentLocation: function($stateParams, shareService, NearbyFactory)
{
return NearbyFactory.getLocations()[$stateParams.index];
}
}
});
$urlRouterProvider.otherwise("/content/home");
});
当用户导航到此页面和页面离开时(用于加载AJAX数据或开始监听一些Cordova传感器),我想在控制器中执行一个方法。像这样:
app.controller("HomeController", function()
{
$scope.onEnter = function(previous_page)
{
...
};
$scope.onExit = function(next_page)
{
...
};
});
我已经在$stateProvider状态下尝试了onEnter和onExit,但很抱歉我没有$scope。
获得此功能的最简单/最好/最好的方法是什么?如果我能确定上一页/下一页,如果用户向后/向前导航,那就太好了。我试过这个:
$scope.$on('$routeChangeStart', function(event, next, current)
{
console.log(next);
});
但这并不是每次都有效,加载页面时也没有触发。这对我来说也有点脏,因为我必须在每个控制器中实现这一点。
谢谢!
您可以使用$ionicView.beforeEnter和beforeLeave。只需将其添加到您的家庭控制器:
app.controller("HomeController", function()
{
$scope.$on('$ionicView.beforeEnter', function() {
//do stuff before enter
});
$scope.$on('$ionicView.beforeLeave', function() {
//do your stuff after leaving
});
});
您可以在此处查看$ionicView的文档。
你可以试试这个。它每次加载页面时都能工作:
$scope.$on('$locationChangeStart', function(event)
{
console.log(event);
});