【问题标题】:Multiple ionic views fails to render多个离子视图无法渲染
【发布时间】:2025-12-26 20:00:18
【问题描述】:

如何拥有多个离子视图? - 我尝试了很多方法来让它工作,但都失败了......

以下是我的 Angular Ionic 应用程序的相关部分:

查看

<body ng-app="ionic_appname">
    <ion-nav-view></ion-nav-view>
    <ion-nav-view name="errorsView" title="Errors"></ion-nav-view>

路由

.config(
    function ($stateProvider, $urlRouterProvider) {
        $urlRouterProvider.otherwise('/');
        $stateProvider
            .state('errors', {
                views: {
                    errorsView: {
                        templateUrl: 'main/templates/errors.html'
                    }
                }
            })
            .state('home', {
                url: '/',
                templateUrl: 'main/templates/home.html',
            })
    }

main/templates/errors.html

<h3>Errors ahoy</h3>

main/templates/home.html

<h3>Tadaima</h3>

但是渲染的输出只是:

<body ng-app="ionic_appname" class="grade-a platform-browser platform-win32 platform-ready">
    <ion-nav-view class="view-container" nav-view-transition="ios" nav-view-direction="none" nav-swipe="">
        <ion-view view-title="Home" class="pane" nav-view="active" style="opacity: 1; transform: translate3d(0%, 0px, 0px);">
            <h3>Tadaima</h3>
        </ion-view>
    </ion-nav-view>
    <ion-nav-view name="errorsView" title="Errors" class="view-container" nav-view-transition="ios"></ion-nav-view>

【问题讨论】:

  • “多视图”是什么意思?多个视图同时可见?
  • 是的,我就是这个意思。
  • 也许状态是错误的,我应该使用 ng-include 甚至自定义 directive 来代替......

标签: angularjs angular-ui-router ionic ionic-view angularjs-view


【解决方案1】:

你已经看过这个 Plunker 了吗?

http://plnkr.co/edit/UkXhXK?p=preview

它使用“嵌套视图”方法,您可能可以在项目中采用这种方法。 例如:

  .state('home', {
      url: '/',
      // loaded into ui-view of parent's template
      views:{
        'homePage': {
          templateUrl: 'main/templates/home.html',
          controller: 'HomeController'
        },
        'errorPage': {
          templateUrl: 'main/templates/errors.html',
          controller: 'ErrorController'
        }
      },
      onEnter: function(){
        console.log("enter home");
      }
  })

【讨论】:

  • 是的,我知道子视图方法,但这需要对所有内容进行命名空间,因为所有内容都会发出错误状态。