2015-02-09 23 views
7

Tôi có một Ionic: gọi Phương pháp trên trang nhập

< ion-side-menu >
với các liên kết đến các trang của tôi định nghĩa ở đây:

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

Tôi muốn thực hiện một phương pháp trong điều khiển của tôi khi người dùng điều hướng đến trang này và khi trang được trái (để tải dữ liệu AJAX hoặc bắt đầu nghe một số cảm biến Cordova). Như thế này:

app.controller("HomeController", function() 
    { 
     $scope.onEnter = function(previous_page) 
     { 
     ... 
     }; 

     $scope.onExit = function(next_page) 
     { 
     ... 
     }; 
    }); 

Tôi đã thử onEnter và onExit bên trong trạng thái $ stateProvider nhưng afaik Tôi không có phạm vi $ của mình ở đó.

Cách dễ nhất/tốt nhất/đẹp nhất để có được chức năng này là gì? Nó sẽ là tuyệt vời nếu tôi có thể xác định trang trước đó/tiếp theo và nếu người dùng điều hướng trở lại/chuyển tiếp. Tôi đã thử điều này:

$scope.$on('$routeChangeStart', function(event, next, current) 
{ 
console.log(next); 
}); 

nhưng điều này không hoạt động mọi lúc và nó không kích hoạt khi tải trang. Điều này cũng có vẻ hơi bẩn đối với tôi bởi vì tôi phải thực hiện điều này trong mọi bộ điều khiển duy nhất.

Cảm ơn bạn!

Trả lời

6

Bạn có thể sử dụng $ ionicView.beforeEnter và beforeLeave. Đơn giản chỉ cần thêm video này vào HomeController của bạn:

app.controller("HomeController", function() 
{ 
     $scope.$on('$ionicView.beforeEnter', function() { 
      //do stuff before enter 

     }); 
     $scope.$on('$ionicView.beforeLeave', function() { 
      //do your stuff after leaving 

     }); 
}); 

Bạn có thể kiểm tra các tài liệu của $ ionicView here.

0

Bạn có thể thử điều này. Nó hoạt động mỗi khi tải trang:

$scope.$on('$locationChangeStart', function(event) 
{ 
    console.log(event); 
}); 
Các vấn đề liên quan