AngularJS / 使用 $stateProvider 的 Ionic 路由 - 控制器不会在第二次调用状态时重新加载
AngularJS / Ionic routing using $stateProvider - controller is not reloading the second time a state is called
原问题
我正在使用 Ionic Framework 和 AngularJS 开发移动应用程序,但我遇到控制器初始化后无法重新加载的问题。
其中一个状态转换(从 'app.postbox-details'
到 'app.audit-questions'
)应将参数传递给 'app.audit-questions'
控制器,但此控制器不会使用新参数更新自身,因为它不是正在重新加载。
代码示例
app.js 文件-配置
angular.module('sf-maintenance', ['ionic', 'starter.controllers', 'starter.services', 'ngCordova'])
.config(function ($stateProvider, $urlRouterProvider, $httpProvider) {
$stateProvider
.state('home', {
url: '/home',
templateUrl: 'templates/home.html',
controller: 'HomeCtrl',
})
.state('app', { //app state being the side-menu
url: '/app',
abstract: true, //means that this state will never be activated directly, users will always go to a child state instead.
templateUrl: 'templates/side-menu.html',
controller: 'MenuCtrl'
})
.state('app.postbox-details', {
url: '/postbox-details',
views: {
'menuContent': {
templateUrl: 'templates/postbox-details.html',
controller: 'PostboxDetailsCtrl'
}
}
})
.state('app.audit-questions', {
url: '/audit-questions/:postboxGuid',
views: {
'menuContent': {
templateUrl: 'templates/audit-questions.html',
controller: 'AuditCtrl'
}
}
})
$urlRouterProvider.otherwise('/home');
});
controller.js 文件(省略了不相关的代码)
angular.module('starter.controllers', [])
.controller('HomeCtrl', function ($scope) {
})
.controller('MenuCtrl', function ($scope) {
})
.controller('PostboxDetailsCtrl', function ($scope, $ionicLoading, $ionicPopup, $cordovaBarcodeScanner, $state, DataService) {
$scope.postboxGuid = DataService.getNewGUID();
//Rest of the controller functions are below
})
.controller('AuditCtrl', function ($scope, $ionicSlideBoxDelegate, $stateParams, DataService) {
$scope.auditDetails = {
postboxGuid: $stateParams.postboxGuid
};
});
查看-导航代码
执行导航的视图代码全部使用 <a>
标签:
- 从主页视图到邮箱详细信息视图:
<a class="button button-block button-dark icon-right ion-chevron-right" href="#/app/postbox-details">New inspection</a>
- 从邮箱详情视图到审核问题视图:
<a class="button button-block button-dark icon-right ion-chevron-right" ng-click="saveFormData()"
ng-href="#/app/audit-questions/{{postboxGuid}}">New audit</a>
所以有人知道如何让控制器在初始化后重新加载吗?或者如果我以错误的方式解决这个问题,你能指导我找到一个可行的方法吗?
更新信息
我最近看到一个 related question and the response by @Radim Köhler pointed to the answer in ,它提供了很好的信息,说明为什么在视图上使用 cache:false
可能不是一个好主意,因为性能。
我想我会分享这个,因为在某些情况下,您可以通过使用 Ionic's built-in view life cycle events 到 运行 代码之一而不必禁用视图缓存来提高性能。
视图是标准缓存在 ionic 中的。缓存可以在视图或状态提供者中配置。
原问题
我正在使用 Ionic Framework 和 AngularJS 开发移动应用程序,但我遇到控制器初始化后无法重新加载的问题。
其中一个状态转换(从 'app.postbox-details'
到 'app.audit-questions'
)应将参数传递给 'app.audit-questions'
控制器,但此控制器不会使用新参数更新自身,因为它不是正在重新加载。
代码示例
app.js 文件-配置
angular.module('sf-maintenance', ['ionic', 'starter.controllers', 'starter.services', 'ngCordova'])
.config(function ($stateProvider, $urlRouterProvider, $httpProvider) {
$stateProvider
.state('home', {
url: '/home',
templateUrl: 'templates/home.html',
controller: 'HomeCtrl',
})
.state('app', { //app state being the side-menu
url: '/app',
abstract: true, //means that this state will never be activated directly, users will always go to a child state instead.
templateUrl: 'templates/side-menu.html',
controller: 'MenuCtrl'
})
.state('app.postbox-details', {
url: '/postbox-details',
views: {
'menuContent': {
templateUrl: 'templates/postbox-details.html',
controller: 'PostboxDetailsCtrl'
}
}
})
.state('app.audit-questions', {
url: '/audit-questions/:postboxGuid',
views: {
'menuContent': {
templateUrl: 'templates/audit-questions.html',
controller: 'AuditCtrl'
}
}
})
$urlRouterProvider.otherwise('/home');
});
controller.js 文件(省略了不相关的代码)
angular.module('starter.controllers', [])
.controller('HomeCtrl', function ($scope) {
})
.controller('MenuCtrl', function ($scope) {
})
.controller('PostboxDetailsCtrl', function ($scope, $ionicLoading, $ionicPopup, $cordovaBarcodeScanner, $state, DataService) {
$scope.postboxGuid = DataService.getNewGUID();
//Rest of the controller functions are below
})
.controller('AuditCtrl', function ($scope, $ionicSlideBoxDelegate, $stateParams, DataService) {
$scope.auditDetails = {
postboxGuid: $stateParams.postboxGuid
};
});
查看-导航代码
执行导航的视图代码全部使用 <a>
标签:
- 从主页视图到邮箱详细信息视图:
<a class="button button-block button-dark icon-right ion-chevron-right" href="#/app/postbox-details">New inspection</a>
- 从邮箱详情视图到审核问题视图:
<a class="button button-block button-dark icon-right ion-chevron-right" ng-click="saveFormData()" ng-href="#/app/audit-questions/{{postboxGuid}}">New audit</a>
所以有人知道如何让控制器在初始化后重新加载吗?或者如果我以错误的方式解决这个问题,你能指导我找到一个可行的方法吗?
更新信息
我最近看到一个 related question and the response by @Radim Köhler pointed to the answer in cache:false
可能不是一个好主意,因为性能。
我想我会分享这个,因为在某些情况下,您可以通过使用 Ionic's built-in view life cycle events 到 运行 代码之一而不必禁用视图缓存来提高性能。
视图是标准缓存在 ionic 中的。缓存可以在视图或状态提供者中配置。