Javascript 使用$stateProvider-controller的AngularJS/Ionic路由不会在第二次调用状态时重新加载 原始问题
我正在使用Ionic框架和AngularJS开发一个移动应用程序,我遇到了控制器初始化后不能重新加载的问题 其中一个状态转换(从Javascript 使用$stateProvider-controller的AngularJS/Ionic路由不会在第二次调用状态时重新加载 原始问题,javascript,angularjs,ionic-framework,url-routing,hybrid-mobile-app,Javascript,Angularjs,Ionic Framework,Url Routing,Hybrid Mobile App,我正在使用Ionic框架和AngularJS开发一个移动应用程序,我遇到了控制器初始化后不能重新加载的问题 其中一个状态转换(从'app.postbox details'到'app.audit questions')应将参数传递给'app.audit questions'控制器,但此控制器不会使用新参数更新自身,因为它不会重新加载 代码示例 app.js文件-配置 controller.js文件(遗漏了不相关的代码) 视图-导航代码 执行导航的视图代码都使用 从邮箱详细信息视图到审核问题视图:
'app.postbox details'
到'app.audit questions'
)应将参数传递给'app.audit questions'
控制器,但此控制器不会使用新参数更新自身,因为它不会重新加载
代码示例
app.js文件-配置
controller.js文件(遗漏了不相关的代码)
视图-导航代码
执行导航的视图代码都使用
最新资料 我最近看到了一个问题,@Radim Köhler的回答指出了答案,其中提供了很好的信息,说明了为什么在视图上使用
cache:false
可能不是一个好主意,因为性能问题
我想我会分享这一点,因为在某些情况下,您可以使用其中一个来运行代码,而无需禁用缓存视图,从而在性能方面受益匪浅。视图是IONAL中的标准缓存视图。可以在视图或状态提供程序中配置缓存
使用
ui-sref
而不是ng hreffor第一个锚使用ui-sref=“app.postbox details”
&对于第二个锚使用ui-sref=“app.audit questions({postboxGuid:postboxGuid})”
而不是它们各自的hrefMost,有时与控制器相关的问题大多是打字错误和注入错误;检查您注入每个控制器的内容,并使用浏览器控制台调试错误Hanks Toxus这已经修复了问题:)我完全忽略了Ionic如何处理Ionic导航视图中的状态变化,我认为这个问题只存在于最新版本的Ionic中。我有一个旧版本的应用程序,其中cache=false,控制器仍然可以正常工作。
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');
});
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
};
});