【发布时间】:2015-07-13 20:08:13
【问题描述】:
问题
My Ionic 应用程序允许您从侧面菜单中选择一个项目,然后在主内容区域中显示两个选项卡(任务、消息)。任务和消息选项卡是项目的嵌套状态。
当您在侧边菜单中更改项目时,TaskListCtrl 会执行两次。请查看 live demo 并在项目之间更改时观察控制台。我还有一个video,它详细说明了这个问题。
如何阻止TaskListCtrl 执行两次?有没有更好的方法来构建这些嵌套状态?
代码
完整代码在GitHub »
这是我的$stateProvider 配置:
.state('project', {
url: "/projects/:projectID",
abstract: true,
cache: false,
controller: 'ProjectDetailCtrl',
templateUrl: "templates/project.tabs.html",
resolve: {
project: function($stateParams, Projects) {
return Projects.get($stateParams.projectID);
}
}
})
.state('project.tasks', {
url: '/tasks',
views: {
'tasks-tab': {
templateUrl: 'templates/task.list.html',
controller: 'TaskListCtrl'
}
}
})
以及来自controllers.js的相关sn-p:
.controller('ProjectDetailCtrl', function($scope, project) {
$scope.project = project;
console.log('=> ProjectDetailCtrl (' + $scope.project.name + ')')
})
.controller('TaskListCtrl', function($scope, $stateParams) {
$scope.tasks = $scope.project.tasks;
console.log('\t=> TaskListCtrl')
console.log('\t\t=> $stateParams: ', $stateParams)
console.log('\t\t=> $scope.tasks[0].title: ', $scope.tasks[0].title)
})
资源
- Live demo(在项目之间进行更改时查看控制台日志)
- Video showing the issue
- Code on GitHub
注意事项
- 我知道 StackOverflow 上有类似的问题 - 但是,他们提供的解决方案都没有解决我的问题。*
- 我已经读到在
$stateProvider和ng-controller中附加控制器时可能会发生这种情况 - 但是,我已经检查过 我没有这样做。 我只是使用$stateProvider附加控制器。
【问题讨论】:
-
除了进行深度调试会话并确保您的选项卡没有被调用两次之外,我没有任何建议。我以前被奇怪的路由和角度标签咬住了。基本上发生的情况是选项卡将一直更改状态到最后一个选项卡,然后反弹回第一个选项卡。这可能不是您的问题,但由于您已经用尽了几乎所有其他途径,因此可能值得一看。
-
谢谢 - 知道我没有忽略一些简单的事情,这让人放心。我将深入研究这些标签,看看我能找到什么。
标签: angularjs ionic-framework angular-ui-router