Подтвердить что ты не робот

AngularJS ng-click, чтобы перейти на другую страницу (с Ionic framework)

В идеале, когда я нажимаю на кнопку (которая находится на панели навигации Ionic наверху), она должна выводить меня на другую страницу. Однако его не работает. После нажатия кнопки панели навигации все исчезает.

Когда я использовал фиктивные коды, он работает; появится предупреждение. Но когда я меняю его на фактический код, он не работает.

У меня есть чувство, что неправильно с кодами контроллера и как ссылается URL или представление. Но тестирование с помощью href и ui-sref также ничего не дает. Google Devt Tools (JS console) и Batarang также ничего не показывают.

Может ли кто-нибудь показать мне, пожалуйста?


dummy html code

<button class="button button-icon ion-compose" ng-click="create()"></button>


код фиктивного контроллера в файле js

$scope.create = function() {
  alert("working");
};


фактический html-код (я пробовал все 4 версии)

<button class="button button-icon ion-compose" ng-click="create('tab.newpost')"></button>
<button class="button button-icon ion-compose" ui-sref="tab.newpost"></button>
<button class="button button-icon ion-compose" href="/tab/newpost"></button>
<button class="button button-icon ion-compose" ng-click="location.path('/tab/newpost')"></button>


Файл контроллера (зависимости Post и Auth работают нормально). Когда я пытаюсь поместить URL-адрес в функции .go() и function(), приложение не работает.

app.controller('NavCtrl', function ($scope, $location, $state, Post, Auth) {
    $scope.post = {url: 'http://', title: ''};

    $scope.create = function() {
      /* $location.path('/tab/newpost'); */   /* this variant doesnt work */
      $state.go("/tab/newpost"); 
    };
  });


Извлечения файла js состояния

.state('tab.newpost', {
      url: '/newpost',
      views: {
        'tab-newpost':{
          templateUrl: 'templates/tab-newpost.html',
          controller: 'NewCtrl'
        }
      }
    });

$urlRouterProvider.otherwise('/auth/login');
4b9b3361

Ответ 1

Основываясь на комментариях, и из-за того, что @Thinkerer (OP-original poster) создал плункер для этого случая, я решил добавить еще один ответ с более подробной информацией.

Первое и важное изменение:

// instead of this
$urlRouterProvider.otherwise('/tab/post');

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

поскольку определение состояний:

.state('tab', {
  url: "/tab",
  abstract: true,
  templateUrl: 'tabs.html'
})

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

и нам нужен их конкатенированный url '/tab' + '/posts'. Что URL, который мы хотим использовать в качестве

Остальная часть приложения действительно близка к результату, который нам нужен...
Например. мы должны размещать контент в одном представлении targetgood, только они были изменены:

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

потому что .state('tab.newpost' будет заменять .state('tab.posts', мы должны поместить его в тот же якорь:

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

Наконец, некоторые настройки в контроллерах:

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

Как я уже сказал в своем предыдущем ответе и комментариях... $state.go() - единственный правильный способ использования ionic или ui-router

Проверьте, что все здесь Заключительное примечание. Я сделал просто навигацию между tab.posts... tab.newpost... остальное было бы похоже

Ответ 2

Использовать <a> с помощью href вместо <button> решает мою проблему.

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

Ответ 3

Можно подумать, что вы должны изменить вызов $state.go(). Как описано здесь:

Пропущенный параметр должен состоять из имени состояния

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

  // we should use this
  $state.go("tab.newpost"); 
};

Некоторые ссылаются на doc (первый параметр на [$state.go(to \[, toParams\] \[, options\]):

в

Строковое абсолютное имя состояния или путь относительного состояния

Имя состояния, которое будет перенесено в или относительный путь состояния. Если путь начинается с ^ или. то оно относительное, в противном случае оно является абсолютным.

Некоторые примеры:

$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.

Ответ 4

app.controller('NavCtrl', function ($scope, $location, $state, $window, Post, Auth) {
    $scope.post = {url: 'http://', title: ''};

    $scope.createVariable = function(url) {
      $window.location.href = url;
    };
    $scope.createFixed = function() {
      $window.location.href = '/tab/newpost';
    };
});

HTML

<button class="button button-icon ion-compose" ng-click="createFixed()"></button>
<button class="button button-icon ion-compose" ng-click="createVariable('/tab/newpost')"></button>

Ответ 5

Если вы просто хотите перейти на другую страницу, то вам может понадобиться ссылка, которая выглядит как кнопка с href следующим образом:

<a href="/#/somepage.html" class="button">Back to Listings</a>

Надеюсь, что это поможет.