AngularJS ng-click to go to another page (with Ionic framework) AngularJS ng-click to go to another page (with Ionic framework) angularjs angularjs

AngularJS ng-click to go to another page (with Ionic framework)


Based on comments, and due to the fact that @Thinkerer (the OP - original poster) created a plunker for this case, I decided to append another answer with more details.

The first and important change:

// instead of this$urlRouterProvider.otherwise('/tab/post');// we have to use this$urlRouterProvider.otherwise('/tab/posts');

because the states definition is:

.state('tab', {  url: "/tab",  abstract: true,  templateUrl: 'tabs.html'}).state('tab.posts', {  url: '/posts',  views: {    'tab-posts': {      templateUrl: 'tab-posts.html',      controller: 'PostsCtrl'    }  }})

and we need their concatenated url '/tab' + '/posts'. That's the url we want to use as a otherwise

The rest of the application is really close to the result we need...
E.g. we stil have to place the content into same view targetgood, just these were changed:

.state('tab.newpost', {  url: '/newpost',  views: {    // 'tab-newpost': {    'tab-posts': {      templateUrl: 'tab-newpost.html',      controller: 'NavCtrl'    }  }

because .state('tab.newpost' would be replacing the .state('tab.posts' we have to place it into the same anchor:

<ion-nav-view name="tab-posts"></ion-nav-view>  

Finally some adjustments in controllers:

$scope.create = function() {    $state.go('tab.newpost');};$scope.close = function() {      $state.go('tab.posts'); };

As I already said in my previous answer and comments ... the $state.go() is the only right way how to use ionic or ui-router

Check that all hereFinal note - I made running just navigation between tab.posts... tab.newpost... the rest would be similar


Use <a> with href instead of a <button> solves my problem.

<ion-nav-buttons side="secondary">  <a class="button icon-right ion-plus-round" href="#/app/gosomewhere"></a></ion-nav-buttons>


One think you should change is the call $state.go(). As described here:

The param passed should be the state name

$scope.create = function() {  // instead of this  //$state.go("/tab/newpost");   // we should use this  $state.go("tab.newpost"); };

Some cite from doc (the first parameter to of the [$state.go(to \[, toParams\] \[, options\]):

to

String Absolute State Name or Relative State Path

The name of the state that will be transitioned to or a relative state path. If the path starts with ^ or . then it is relative, otherwise it is absolute.

Some examples:

$state.go('contact.detail') will go to the 'contact.detail' state$state.go('^') will go to a parent state.$state.go('^.sibling') will go to a sibling state.$state.go('.child.grandchild') will go to a grandchild state.