angular $ stateprovider работает не так, как ожидалось

#angularjs #ionic-framework

#angularjs #ионный фреймворк

Вопрос:

Я использую angular $stateProvider , чтобы разрешить маршруты во всем моем приложении. У меня есть index.html , и я изменяю содержимое html внутри, используя следующее…

 app.config(function($stateProvider, $urlRouterProvider) {
  $urlRouterProvider.otherwise('/app');
  $stateProvider

    .state('app', {
      url: '/app',
      templateUrl: 'templates/menu.html',
      controller: 'AppCtrl'
    })
    .state('app.accounts', {
      url: '/accounts',
      templateUrl: 'templates/accounts.html'
    })  
});
  

Первый маршрут работает, при открытии приложение template/menu.html помещается внутрь index.html . Проблема возникает, когда я пытаюсь изменить состояние.

На данный момент я реализую API в своем приложении, то, что делает API, не имеет значения, но в случае успеха я хочу, чтобы API изменил состояние на app.accounts , см. Ниже…

 app.controller('AppCtrl', function($scope, $ionicModal, $timeout) {
  $scope.create = function() {
  var linkHandler = Plaid.create({ 
    env: 'tartan',
    clientName: 'Example Project',
    key: 'test_key',
    product: 'connect',
    //On success I want to change the state
    onSuccess: function(token) {
        window.location = '/app/accounts';

    }, 
  });
  linkHandler.open();
  }

});
  

Выше, в случае успеха, я пытаюсь изменить состояние, но при window.location вызове я получаю сообщение об ошибке…

 net::ERR_FILE_NOT_FOUND (file:///app/accounts)
  

Я не уверен, почему я получаю эту ошибку, потому что первый маршрут работает нормально. Есть идеи, как я могу это исправить?

Ответ №1:

Ваш путь неверен. Вот о чем говорит ошибка. Он не может найти этот маршрут.

Попробуйте $window.location.href = "/#/app/accounts";

Не забудьте ввести $window в контроллер.

Однако лучшим способом было бы внедрить $state сервис и использовать его для навигации:

 $state.go('app.accounts')
  

Комментарии:

1. хорошо, я сделал href="#/app/accounts" это, и ошибка исчезла, но вместо этого она перенаправляет меня в app состояние (исходное состояние). Вы знаете, почему?

2. Вероятно, в маршруте что-то не так, и он вводится в метод .otherwise() в ваших определениях маршрутов

3. Однако, если вы используете $stateProvider, лучший подход для перенаправления — использовать $state.go(‘app.accounts’)

4. хорошо, я дам вам лучший ответ, потому что вы в значительной степени решили его, но я все еще не могу понять, почему это происходит в otherwise

5. Вместо этого используйте $state.go . Поскольку вы используете ionic, вероятно, путь отличается от пути briwser