javascript - $state.go 不适用于 ionic 框架

标签 javascript cordova ionic-framework

我正在使用 ionic 框架创建一个cordova应用程序,我使用CLI创建了一个空白应用程序,在我的index.html中我有一个幻灯片框,其中最后一张幻灯片中有一个按钮。 我已经在该按钮中注册了一个单击事件,在单击按钮时我想导航到 templates/projects.html。 我希望我的问题很清楚。 谢谢

index.html文件

  <body ng-app="starter" class="platform-android platform-cordova platform-webview">

<ion-pane>
  <ion-header-bar class="bar-stable">
    <h1 class="title">BabyLapse</h1>
  </ion-header-bar>
  <ion-content>
      <ion-slide-box style="height:100%" on-slide-changed="slideHasChanged($index)">
          <ion-slide >
              <div style="height:100%" class="box blue"><h1>BLUE</h1>
                  <img src="img/tutorial_img1.jpg">
              </div>
          </ion-slide>
          <ion-slide>
              <div class="box yellow"><h1>YELLOW</h1>
              <img src="img/tutorial_img2.jpg">
              </div>
          </ion-slide>
          <ion-slide>
              <div class="box pink"><h1>PINK</h1>
                  <img src="img/tutorial_img3.jpg" class="image">
              </div>
          </ion-slide>
          <ion-slide>
              <div class="box blue"><h1>BLUE</h1>
                  <img src="img/tutorial_img4.jpg">
              </div>
          </ion-slide>
          <ion-slide ng-controller="FirstSlideCtrl">
              <div class="box yellow"><h1>YELLOW</h1>
                 <!-- <img src="img/tutorial_img5.jpg" >-->
                  <button style="z-index:1000;height:100px;width:100px" ng-click="go('app.projects');">Créer Projet</button>
              </div>
          </ion-slide>
      </ion-slide-box>
  </ion-content>
</ion-pane>

app.js文件

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

              .state('app', {
              url: "/app",
              abstract: true,
              templateUrl: "index.html",
              controller: 'StarterCtrl'

          })

          .state('app.projects', {
              url: "/projects",
              views: {
                  'projects': {
                      templateUrl: "templates/projects.html",
                      controller: 'ProjectsCtrl'
                  }
              }
          });
          //$urlRouterProvider.otherwise('/projects');
      })

  .run(function($ionicPlatform) {
      $ionicPlatform.ready(function() {
          // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
          // for form inputs)
          if (window.cordova && window.cordova.plugins.Keyboard) {
              cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
          }
          if (window.StatusBar) {
              StatusBar.styleDefault();
          }

      })
  });

controllers.js

 angular.module('starter.controllers', ['ui.router'])

   .controller("StarterCtrl", function($scope) {
           $scope.data = {
               numViewableSlides: 0,
               slideIndex: 0,
               initialInstruction: true,
               secondInstruction: false

           };
           $scope.slideHasChanged = function(index) {
               $scope.data.slideIndex = index;
           };
           $scope.go = function(route) {
               alert('1');
               $state.go(route);

           };

       })
       .controller("ProjectsCtrl", function($scope) {

           $scope.playlists = [{
               title: 'Reggae',
               id: 1
           }, {
               title: 'Chill',
               id: 2
           }, {
               title: 'Dubstep',
               id: 3
           }, {
               title: 'Indie',
               id: 4
           }, {
               title: 'Rap',
               id: 5
           }, {
               title: 'Cowbell',
               id: 6
           }];
       })
       .controller("FirstSlideCtrl", function($scope, $state) {

           $scope.go = function(route) {
               alert(route);
               $state.go('app.projects');

           };

       });

最佳答案

我无法遵循您的代码,因此我将尝试重新创建。 在 Ionic/Cordova 中,您应该有一个 index.html,它将作为您的应用程序条目。

这是您将 HTML 与 Angular 应用程序绑定(bind)以及引用脚本的地方。

它应该有一个带有主导航 View 的主体 <ion-nav-view> :

<ion-nav-bar class="bar-positive">
  <ion-nav-back-button>
  </ion-nav-back-button>
</ion-nav-bar>  

<ion-nav-view></ion-nav-view>

我的ng-app称为app,但您可以轻松地将其替换为starter

然后您将拥有针对不同 View 的单独“页面”。我可以想象在您的情况下,您将有一个用于 slider 的 View 和第二个用于项目创建的 View 。

每个 View 必须在 <ion-view> 中定义您将在哪里获得内容 <ion-content> .

我想你需要说明:

.state('main', {
    url: '/main',
    templateUrl: 'main.html',
    controller: 'mainController',
})

.state('projects', {
    url: '/projects',
    templateUrl: 'projects.html',
    controller: 'projectsController',
});    

如果您想从 slider 页面转到项目,您只需:

$state.go('projects')

这就结束了result在一个笨蛋中。

正如您所看到的,我阅读了抽象 View ,因为在我看来,您实际上并不需要它,因为您没有使用任何基本模板:侧面菜单或选项卡。

您随时可以添加它,但您的摘要永远不应该引用index.html 文件。

关于javascript - $state.go 不适用于 ionic 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30258941/

相关文章:

javascript - 使用 JavaScript 有条件地打开表单提交页面

javascript - jQuery UI 自动完成组合框选项需要在 iPhone 上双击

html - 我们如何将所需的 CSS 应用于完整的 ionic 应用程序框架

android - Ionic Cordova 应用程序未在 Android 上安装

javascript - 数据表排序不按降序显示

javascript - Coderbyte 挑战 4 : Letter Changes - Won't Upper Case

javascript - 如何按键将 JSON 对象转换为 Javascript 数组过滤器?

jquery - 在 Windows Phone 上通过 PhoneGap 使用 jQuery .find()

angularjs - Cordova 文件写入抛出 EACCES(权限被拒绝)错误

php - 如何将我的 ionic 应用程序与 MAMP MYSQL 连接?