选项卡和侧面菜单 - 指向状态的链接不起作用

时间:2016-10-31 07:45:05

标签: javascript angularjs ionic-framework

我根据这个答案构建了我的应用程序的结构:

How to set up sidemenu with tabs in Ionic?

结合侧边菜单和标签:

我的app.js文件如下所示:

$stateProvider

.state('app', {
 url: '/app',
 abstract: true,
 templateUrl: 'templates/menu.html',
 controller: 'AppCtrl'
})
.state('app.tabs', {
  url: '/tabs',
  views: {
    'menuContent': {
      templateUrl: 'templates/tabs.html'
    }
  }
})
.state('app.tabs1.general', {
  url: '/tabs1-general',
  views: {
    'general-tab': {
      templateUrl: 'templates/general1.html',
      controller: 'General1Ctrl'
    }
  }
})
.state('app.tabs2', {
  url: '/tabs2',
  views: {
    'menuContent': {
      templateUrl: 'templates/tabs2.html'
    }
  }
})
.state('app.tabs2.general', {
  url: '/tabs2-general',
  views: {
    'general2-tab': {
      templateUrl: 'templates/general2.html',
      controller: 'General1Ctrl'
    }
  }
})

$urlRouterProvider.otherwise('/app/ofertas/ofertas-reporte');

当我测试在urlRouterProvider的otherwise方法设置路径的所有路线时,一切正常,但是当我在侧栏设置路线时,URL不匹配:

这是我的菜单:

<ion-content>
  <ion-list class="coloredList">
    <ion-item class="sap-color" menu-close href="#/app/tabs1">
      <i class="ion-compose"></i> tabs1
    </ion-item>
   <ion-item class="sap-color" menu-close href="#/app/tabs2">
      <i class="ion-android-star"></i> tabs2
    </ion-item>
 ...

我也尝试过ui-sref,但似乎没有任何效果。

有什么建议吗?

5 个答案:

答案 0 :(得分:4)

路线似乎有问题,你可以尝试一下:

$stateProvider

.state('app', {
 url: '/app',
 abstract: true,
 templateUrl: 'templates/menu.html',
 controller: 'AppCtrl'
})
.state('app.tabs', {
  url: '/tabs',
  views: {
    'menuContent': {
      templateUrl: 'templates/tabs.html'
    }
  }
})
.state('app.tabs1', {
    url: "/tabs1",
     abstract: true,
     views: {
         'menuContent': {
               templateUrl: "templates/tabs1.html",
                controller: "Tabs1Ctrl"
           }
      }
})
.state('app.tabs1.general', {
  url: '/tabs1-general',
  views: {
    'general-tab': {
      templateUrl: 'templates/general1.html',
      controller: 'General1Ctrl'
    }
  }
})
.state('app.tabs2', {
  url: '/tabs2',
  abstract: true,
  views: {
    'menuContent': {
      templateUrl: 'templates/tabs2.html'
    }
  }
})
.state('app.tabs2.general', {
  url: '/tabs2-general',
  views: {
    'general2-tab': {
      templateUrl: 'templates/general2.html',
      controller: 'General1Ctrl'
    }
  }
})

$urlRouterProvider.otherwise('/app/ofertas/ofertas-reporte');

答案 1 :(得分:3)

查看此项目:https://github.com/mircobabini/ionic-sidemenu-tabs-together我认为这可以满足您的需求。它是一个较旧的项目,可能需要一些更新,但它将作为一个起点。在codepen中有一个demo,链接在github上。

答案 2 :(得分:3)

来自我的一个旧项目。 (http://aitam.newtonjoshua.com

文档:https://newtonjoshua.com/apps/aitam/aitam.html

所有关于使用ion-nav-view处理ui routing的问题。

<强> SideMenu:

app.js:在下面的示例中,有一个 侧边菜单 ,其中包含一个视图 menuContent < / p>

menu.html:根据选择(tab1或tab2),内容menuContent将为tab1.html或tab2.html

<强> 标签:

app.js: tab1包含视图 tab1-general(n),tab2包含视图 tab2-general(n)

tab1.html / tab2.html:根据选项卡的选择,将显示相应的html内容。

<强> app.js

// app.js

        $stateProvider
            .state('app', {
                url: "/app",
                abstract: true,
                templateUrl: "templates/menu.html",
                controller: 'AppCtrl'
            })


            //tab1

            .state('app.tab1', {
                url: "/tab1",
                views: {
                    // view name: menuContent
                    'menuContent': {
                        templateUrl: "templates/tab1.html",
                        controller: 'tabs1Ctrl'
                    }
                }
            })

            .state('app.tab1.general1', {
                url: '/general1',
                views: {
                    // view name: tab1-general1
                    'tab1-general1': {
                        templateUrl: 'templates/tab1-general1.html',
                        controller: 'general1Ctrl'
                    }
                }
            })

            //tab2

            .state('app.tab2', {
                url: "/tab2",
                views: {
                    // view name: menuContent
                    'menuContent': {
                        templateUrl: "templates/tab2.html",
                        controller: 'tabs2Ctrl'
                    }
                }
            })

            .state('app.tab2.general2', {
                url: '/general2',
                views: {
                    // view name: tab2-general2
                    'tab2-general2': {
                        templateUrl: 'templates/tab2-general2.html',
                        controller: 'general2Ctrl'
                    }
                }
            });
        // if none of the above states are matched, use this as the fallback
        $urlRouterProvider.otherwise('/app/home');

<强> menu.html

<ion-side-menus enable-menu-with-back-views="false">
    <ion-side-menu-content >
        <ion-nav-bar class="bar-navy" >
            <ion-nav-buttons side="left" >
                <button ng-show="sideMenu" class="button button-icon button-clear ion-navicon" menu-toggle="left">
                </button>
            </ion-nav-buttons>
        </ion-nav-bar>

        <!--view name: menuContent-->
        <ion-nav-view name="menuContent"></ion-nav-view>

    </ion-side-menu-content>

    <ion-side-menu side="left">
        <ion-header-bar class="bar-navy">
            <h1 class="title" style="color:white">APP NAME</h1>
        </ion-header-bar>
        <ion-content>
            <ion-list>
                <ion-item nav-clear menu-close href="#/app/tab1" class="item-icon-left">
                    TAB 1
                </ion-item>
                <ion-item nav-clear menu-close href="#/app/tab2" class="item-icon-left">
                    TAB 2
                </ion-item>
                <ion-item nav-clear menu-close href="#/app/home" class="item-icon-left">
                    Home
                </ion-item>
            </ion-list>

        </ion-content>
    </ion-side-menu>
</ion-side-menus>

<强> tab1.html

<ion-view view-title="TAB 1">
    <ion-content class="padding">
        TAB 1
    </ion-content>
    <ion-tabs id="tab1" class="tabs-icon-bottom">

        <ion-tab title="Tab 1 - General 1" icon-off="ion-ios-pie-outline" icon-on="ion-ios-pie" href="#/app/tab1/general1">

            <!--view name: tab1-general1-->
            <ion-nav-view name="tab1-general1"></ion-nav-view>

        </ion-tab>

        <ion-tab title="Tab 1 - General 2" icon-off="ion-ios-list-outline" icon-on="ion-ios-list" href="#/app/tab1/general2">
            <ion-nav-view name="tab1-general2"></ion-nav-view>
        </ion-tab>

    </ion-tabs>
</ion-view>

<强> tab2.html

<ion-view view-title="TAB 2">
    <ion-content class="padding">
        TAB 2
    </ion-content>
    <ion-tabs id="tab2" class="tabs-icon-bottom">

        <ion-tab title="Tab 2 - General 1" icon-off="ion-ios-pie-outline" icon-on="ion-ios-pie" href="#/app/tab2/general1">
            <ion-nav-view name="tab2-general1"></ion-nav-view>
        </ion-tab>

        <ion-tab title="Tab 2 - General 2" icon-off="ion-ios-list-outline" icon-on="ion-ios-list" href="#/app/tab2/general2">

              <!--view name: tab2-general2-->
            <ion-nav-view name="tab2-general2"></ion-nav-view>

        </ion-tab>

    </ion-tabs>
</ion-view>

答案 3 :(得分:2)

例如,在宣布app.tabs1.general州之前,您的孩子状态未得到充分宣布app.tabs1需要abstract=true状态app.tabs1.general。对于其他州,依此类推如下代码:

$stateProvider

 .state('app', {
   url: '/app',
   abstract: true,
   templateUrl: 'templates/menu.html',
   controller: 'AppCtrl'
 })
 .state('app.tabs', {
   url: '/tabs',
   views: {
   'menuContent': {
    templateUrl: 'templates/tabs.html'
  }
  }
 })
 .state('app.tabs1', {
   url: "/tabs1",
   abstract: true,
   views: {
     'menuContent': {
           templateUrl: "templates/tabs1.html",
            controller: "Tabs1Ctrl"
       }
  }
})
.state('app.tabs1.general', {
 url: '/tabs1-general',
 views: {
 'general-tab': {
  templateUrl: 'templates/general1.html',
  controller: 'General1Ctrl'
}
}
})
.state('app.tabs2', {
  url: '/tabs2',
  abstract: true,
  views: {
   'menuContent': {
   templateUrl: 'templates/tabs2.html'
  }
 }
})
.state('app.tabs2.general', {
  url: '/tabs2-general',
  views: {
  'general2-tab': {
  templateUrl: 'templates/general2.html',
  controller: 'General1Ctrl'
 }
}
 })

您还需要在HTML ui-sref中使用等于您的状态而不是href

<ion-content>
 <ion-list class="coloredList">
  <ion-item class="sap-color" menu-close ui-sref="app.tabs1">
  <i class="ion-compose"></i> tabs1
  </ion-item>
  <ion-item class="sap-color" menu-close href="app.tabs2">
  <i class="ion-android-star"></i> tabs2
  </ion-item>
 ...

答案 4 :(得分:2)

检查此链接http://plnkr.co/edit/T1qr0BWWbtLfHQRJQGJf?p=preview

中的其他HTML和DEMO

JS:

angular.module('ionicApp', ['ionic'])
.config(function($stateProvider, $urlRouterProvider) {
  $stateProvider

  .state('app', {
   url: '/app',
   abstract: true,
   templateUrl: 'menu.html'
  })

  .state('app.tabs', {
    url: '/tabs',
    views: {
      'menuContent': {
        templateUrl: 'tabs.html'
      }
    }
  })

  .state('app.tabs1-general', {
    url: '/tabs1-general',
    views: {
      'menuContent': {
        templateUrl: 'general1.html'
      }
    }
  })

  .state('app.tabs2', {
    url: '/tabs2',
    views: {
      'menuContent': {
        templateUrl: 'tabs2.html'
      }
    }
  })

  .state('app.tabs2-general', {
    url: '/tabs2-general',
    views: {
      'menuContent': {
        templateUrl: 'general2.html'
      }
    }
  })

  $urlRouterProvider.otherwise('/app/tabs');
});

HTML:

<ion-side-menus>
  <ion-side-menu-content>
    <ion-header-bar class="bar-header">
      <button class="button button-icon icon ion-navicon" menu-toggle="left"></button>
    </ion-header-bar>
    <ion-nav-view name="menuContent"></ion-nav-view>
  </ion-side-menu-content>
  <ion-side-menu side="left">
    <ion-content>
      <ion-list class="coloredList">
        <ion-item class="sap-color" menu-close href="#/app/tabs">
          <i class="ion-compose"></i> tabs1
        </ion-item>
        <ion-item class="sap-color" menu-close href="#/app/tabs2">
          <i class="ion-android-star"></i> tabs2
        </ion-item>
        <ion-item class="sap-color" menu-close href="#/app/tabs1-general">
          <i class="ion-compose"></i> tabs1-general
        </ion-item>
        <ion-item class="sap-color" menu-close href="#/app/tabs2-general">
          <i class="ion-android-star"></i> tabs2-general
        </ion-item>
      </ion-list>
    </ion-content>
  </ion-side-menu>
</ion-side-menus>