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 子url中的离子和角度ui路由器导航问题_Angularjs_Ionic Framework_Angular Ui Router - Fatal编程技术网

Angularjs 子url中的离子和角度ui路由器导航问题

Angularjs 子url中的离子和角度ui路由器导航问题,angularjs,ionic-framework,angular-ui-router,Angularjs,Ionic Framework,Angular Ui Router,在我的Ionic应用程序中,特别是在Chrome中通过Ionic Service进行测试时,我看到在使用Ionic选项卡导航时出现了一种奇怪的行为。如果我将页面作为根路由()加载,导航和状态工作正常。我可以单击页面底部的任何选项卡(iOS视图),获得预期的行为 现在,如果我加载其中一个嵌套视图的URL,并单击选项卡返回父视图,则只显示我输入的子视图 示例(借用爱奥尼亚的夜间笔): 当在没有#/tab/facts2的情况下输入上述代码笔时,导航按预期进行-我可以单击“科学事实”按钮,向下导航几个

在我的Ionic应用程序中,特别是在Chrome中通过Ionic Service进行测试时,我看到在使用Ionic选项卡导航时出现了一种奇怪的行为。如果我将页面作为根路由()加载,导航和状态工作正常。我可以单击页面底部的任何选项卡(iOS视图),获得预期的行为

现在,如果我加载其中一个嵌套视图的URL,并单击选项卡返回父视图,则只显示我输入的子视图

示例(借用爱奥尼亚的夜间笔):

当在没有#/tab/facts2的情况下输入上述代码笔时,导航按预期进行-我可以单击“科学事实”按钮,向下导航几个孩子,然后单击“主页”图标并返回根目录

当在第二个URL输入时,正如我所料,我会直接进入facts2页面。然而,点击“主页”图标总是会让我回到facts2

<ion-tab title="Home" icon="ion-home" href="#/tab/home">
    <ion-nav-view name="home-tab"></ion-nav-view>
</ion-tab>

有趣的是,如果我使用facts2页面上的“主页”按钮,它确实可以正确导航到主页,但导航图标将不起作用

<a class="button icon ion-home" href="#/tab/home"> Home</a>

对于ui路由器/状态更改是如何工作的,是否有什么我不理解的地方,或者这是一个bug?我主要担心的是,当编译和部署此应用程序时,用户将程序保留在其中一个子状态,然后重新打开,导航栏将断开。

加载您对配置文件的stateprovider声明的视图。如果先加载次视图,它将不会创建正确的导航历史记录,并且您将无法返回到主选项卡视图。“名称”属性与您在上的名称相同:

views: {
        'home-tab': {
          templateUrl: "templates/home.html",
          controller: 'HomeTabCtrl'
        }
      }
因此,如果要首先加载次视图,请添加:

 $scope.$on('$ionicView.beforeEnter', function (event, viewData) {
    $ionicHistory.clearCache();
});
在主选项卡视图控制器中,它将清除视图缓存并替换为右视图/html

另一种方法是使用所需状态的副本,该副本将作用于正在使用的当前视图,例如:

    $stateProvider
    .state('tabs', {
      url: "/tab",
      abstract: true,
      templateUrl: "templates/tabs.html"
    })
    .state('tabs.home', {
      url: "/home",
      views: {
        'home-tab': {
          templateUrl: "templates/home.html",
          controller: 'HomeTabCtrl'
        }
      }
    })
    .state('tabs.facts', {
      url: "/facts",
      views: {
        'home-tab': {
          templateUrl: "templates/facts.html"
        }
      }
    })
    .state('tabs.facts2', {
      url: "/facts2",
      views: {
        'home-tab': {
          templateUrl: "templates/facts2.html"
        }
      }
    })
    .state('tabs.about', {
      url: "/about",
      views: {
        'about-tab': {
          templateUrl: "templates/about.html"
        }
      }
    })
   .state('tabs.aboutFacts2', {
      url: "/about/facts2",
      views: {
        'about-tab': {
          templateUrl: "templates/facts2.html"
        }
      }
    })
这不会解决你的问题,但也不会导致它。Facts2正在替换两个不同的视图,可以从两个不同的上下文访问,从而保持导航历史记录的严密性。

加载您在配置文件的stateprovider声明上的视图。如果先加载次视图,它将不会创建正确的导航历史记录,并且您将无法返回到主选项卡视图。“名称”属性与您在上的名称相同:

views: {
        'home-tab': {
          templateUrl: "templates/home.html",
          controller: 'HomeTabCtrl'
        }
      }
因此,如果要首先加载次视图,请添加:

 $scope.$on('$ionicView.beforeEnter', function (event, viewData) {
    $ionicHistory.clearCache();
});
在主选项卡视图控制器中,它将清除视图缓存并替换为右视图/html

另一种方法是使用所需状态的副本,该副本将作用于正在使用的当前视图,例如:

    $stateProvider
    .state('tabs', {
      url: "/tab",
      abstract: true,
      templateUrl: "templates/tabs.html"
    })
    .state('tabs.home', {
      url: "/home",
      views: {
        'home-tab': {
          templateUrl: "templates/home.html",
          controller: 'HomeTabCtrl'
        }
      }
    })
    .state('tabs.facts', {
      url: "/facts",
      views: {
        'home-tab': {
          templateUrl: "templates/facts.html"
        }
      }
    })
    .state('tabs.facts2', {
      url: "/facts2",
      views: {
        'home-tab': {
          templateUrl: "templates/facts2.html"
        }
      }
    })
    .state('tabs.about', {
      url: "/about",
      views: {
        'about-tab': {
          templateUrl: "templates/about.html"
        }
      }
    })
   .state('tabs.aboutFacts2', {
      url: "/about/facts2",
      views: {
        'about-tab': {
          templateUrl: "templates/facts2.html"
        }
      }
    })
这不会解决你的问题,但也不会导致它。Facts2正在替换两个不同的视图,并且可以从两个不同的上下文访问,从而保持导航历史的严密性