Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 控制器在ui路由器嵌套状态下执行两次(离子型) 问题_Angularjs_Ionic Framework_Angular Ui Router - Fatal编程技术网

Angularjs 控制器在ui路由器嵌套状态下执行两次(离子型) 问题

Angularjs 控制器在ui路由器嵌套状态下执行两次(离子型) 问题,angularjs,ionic-framework,angular-ui-router,Angularjs,Ionic Framework,Angular Ui Router,My Ionic应用程序允许您从侧边菜单中选择一个项目,然后在主内容区域中显示两个选项卡(任务、消息)。任务和消息选项卡是项目的嵌套状态 在侧菜单中更改项目时,任务列表Ctrl将执行两次。在项目之间更改时,请查看并观看控制台。我也有一份详细的报告 如何停止执行两次TaskListCtrl?有没有更好的方法来构造这些嵌套状态 代码 完整代码已打开 这是我的$stateProvider配置: .state('project', { url: "/projects/:projectID", a

My Ionic应用程序允许您从侧边菜单中选择一个项目,然后在主内容区域中显示两个选项卡(任务、消息)。任务和消息选项卡是项目的嵌套状态

在侧菜单中更改项目时,
任务列表Ctrl
将执行两次。
在项目之间更改时,请查看并观看控制台。我也有一份详细的报告

如何停止执行两次
TaskListCtrl
?有没有更好的方法来构造这些嵌套状态

代码 完整代码已打开

这是我的
$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
中的相关代码片段:

.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)
})
资源
  • (在项目之间更改时查看控制台日志)
笔记
  • 我知道在StackOverflow上也有类似的问题——但是,他们提供的任何解决方案都不能解决我的问题*
  • 我已经了解到,在
    $stateProvider
    ng controller
    中连接控制器时可能会发生这种情况-但是,我已经检查过,并且我没有这样做。我只使用
    $stateProvider
    连接控制器
    • 我想这是对的

      这似乎是路由和参数以及离子标签的问题。 我几乎花了一整天的时间想弄清楚到底发生了什么

      我认为问题在于你使用的是一个带有参数的抽象控制器,但这不是问题所在

      我已经检查了侧菜单是否干扰了选项卡,但问题仍然不存在

      我使用
      controllerAs
      检查了作用域,试图消除摩擦,并避免引用$scope对象来存储viewmodel,但是。。。没什么

      我已经创建了您的应用程序的简化版本。
      这里没有太多内容,导航是通过标题中的常量进行的。 正如你所看到的,问题仍然存在

      进行一点调试后,问题似乎就解决了。
      那条线呼叫控制器两次。您可以通过在ionic.bundle.js中的第48435行添加断点来检查它

      您唯一的选择是更改project.tabs.html并加载不带子视图的任务列表。大概是这样的:

      <ion-view view-title="{{ project.name }}: Tasks">
      
      <ion-tabs class="tabs-icon-top tabs-positive">
      
        <ion-tab title="{{ project.name }} Tasks" icon="ion-home">
      
          <ion-nav-view>
            <ion-content>
              <ion-list>
                <ion-item class="item-icon-right" ng-repeat='task in project.tasks'>
                  {{ task.title }}
                  <i class="icon ion-chevron-right icon-accessory"></i>
                </ion-item>
              </ion-list>
            </ion-content>
          </ion-nav-view>
      
        </ion-tab>
      
        <ion-tab title="About" icon="ion-ios-football" ui-sref="tabs.tab2">
          <ion-nav-view name="tabs-tab2"></ion-nav-view>
        </ion-tab>
      
        <ion-tab title="Another" icon="ion-help-buoy" ui-sref="tabs.tab3">
          <ion-nav-view name="tabs-tab3"></ion-nav-view>
        </ion-tab>
      
      </ion-tabs>
      
      </ion-view>
      
      
      {{task.title}}
      
      你可以检查它是如何工作的


      我想我们应该打开一个问题。

      除了进行深度调试会话并确保您的选项卡不会被调用两次之外,我没有其他建议。我曾经被路由和角度标签奇怪的工作咬过。从本质上讲,选项卡将一直更改状态到最后一个选项卡,然后反弹到第一个选项卡。这可能不是你的问题,但由于你已经用尽了几乎所有其他途径,这可能值得一看。谢谢-知道我没有忽略一些简单的事情,这让人放心。我会深入研究这些标签,看看我能找到什么。谢谢你深入挖掘并打开这个问题。作为一个爱奥尼亚的新手,我要花很长时间才能深入到这一步。注意:问题在GitHub@KyleFox上:很高兴我在某种程度上提供了帮助。几天前我也回答了类似的问题。似乎很多人发现很难处理导航/亚导航和历史。希望有人能解决这个问题。干杯