Angular перенаправление на другое без обнаружения вида, но оно работает, когда я нажимаю кнопку "Назад"

Обновление Ни один из ответов или комментариев ниже не помогает, я хочу, чтобы кто-то дал мне правильный ответ.

Когда я помещаю этот url ниже в моем браузере - он берет меня за мой взгляд на фрукты и прекрасно работает,

http://localhost:53052/AppTest.aspx#/fruits

НО, когда я перехожу к home view и нажимаю кнопку и пытаюсь перейти к представлению 'fruits', тогда он перенаправляет меня на http://localhost:53052/AppTest.aspx#/routeNotFound

НО, когда я нажимаю кнопку браузера, он возвращается к просмотру фруктов, а затем, если я снова нажимаю, он возвращается к домашнему виду.

Итак, вот что происходит в древовидной структуре,

- > Нажмите кнопку "Просмотр дома" (следует перейти к fruits view, но вместо этого перейти к представлению routeNotFound)

- > Когда я нажимаю кнопку "Назад" в браузере, она переходит в fruits view, а затем, когда я нажимаю кнопку "назад", она переходит в home view

Вот мои маршруты,

(function () {
    'use strict';
    var app = angular.module('fruitApp');
    app.constant('routes', getRoutes());
    app.config(['$routeProvider', 'routes', routeConfigurator]);

    function routeConfigurator($routeProvider, routes) {
        routes.forEach(function (route) {
            $routeProvider.when(route.url, route.config);
        });
        $routeProvider.otherwise({ redirectTo: '/routeNotFound' });
    }

    function getRoutes() {
        return [
          {
              url: '/home',
              config: {
                  templateUrl: 'App/templates/home.html',
              }
          },
          {
              url: '/fruits',
              config: {
                  templateUrl: 'App/templates/fruits.html',
              }
          }
        ];
    }
})();

Основной вид (я использую его только для загрузки модулей и загрузки в него других видов)

   <div data-ng-app="fruitApp">
        <div data-ng-view="">
        </div>
    </div>

Домашний просмотр

<div data-ng-controller="home as vm">
     <div data-ng-click="vm.goToFruits()">click Me!</div>
</div>

Домашний контроллер

(function () {
    'use strict';

    var controllerId = "home";
    angular.module('fruitApp').controller(controllerId,
        ['$location', 'datacontext', home]);

    function home($location, datacontext) {
        var vm = this;
        vm.goToFruits = goToFruits;

        function goToFruits() {
            $location.path('/fruits');
        }
    };
})();

Фруктовый вид

<div data-ng-controller="fruits as vm"> fruits </div>

Контроллер фруктов

(function () {
    'use strict';

    var controllerId = "fruits";
    angular.module('fruitApp').controller(controllerId,
        ['$location', 'datacontext', fruits]);

    function fruits($location, datacontext) {
        var vm = this;
    };
})();

Я следую этому проекту, поэтому определяющий модуль, как я, не должен быть проблемой, если я не пропущу какой-либо концепции?

https://github.com/OfficeDev/Learning-Path-Manager-Code-Sample/blob/master/App/learningPath/learningPaths.js

Edit

Я попробовал изменить конфигурацию маршрута и некоторый код в контроллере, чтобы использовать ui-route, вместо этого теперь он возвращает меня к представлению плодов (как это делалось ранее), но это не перенаправляет меня на "иначе" маршрут, но он все еще меняется URL-адрес /routeNotFound..

Обновление

В результате я использовал href и ng-href для переключения просмотров.

Ответ 1

В вашем примере у вас много "пуха". Я немного разобрал, и вы можете увидеть здесь демонстрацию plunkr - это помогает увидеть, запускаете ли вы ее без рамки - http://run.plnkr.co/plunks/40eDlZfZQnAJRWxeg1ge/#.

Для меня похоже, что все работает отлично. Я могу щелкнуть текст, чтобы перейти к контроллеру "фрукты", и я нажал кнопку "назад" в браузере, чтобы вернуться к "дому".

Несколько вещей о вашем коде:

  • Ваш app.module должен быть объявлен с помощью app.module('fruitsApp', ['ngRoute']);, чтобы гарантировать загрузку зависимостей.
  • Я удалил "datacontext" и т.д., что ваш код кода не должен знать о
  • Я использую базовые шаблоны, а не шаблоны в маршрутах.
  • Я сделал перенаправление маршрута по умолчанию на '/home' - это имеет смысл в вашем контексте?

Мой совет для вас - удалить фрагменты кода до тех пор, пока он не начнет работать, а затем используйте это, чтобы выяснить, что именно вызывает проблемы.

Ответ 2

Я предлагаю вам пойти простыми, сначала сделайте скелет вашего приложения с функцией маршрутизации и требуемыми зависимостями позже для расширения и улучшения. одна большая ошибка, которую вы сделали, это то, что вы не включили ngRoute в fruitApp. рабочий пример, вы можете проверить этот plunker пример ng-routing

(function () {
    'use strict';
    var app = angular.module('fruitsApp', ['ngRoute']);
    app.constant('routes', getRoutes());
    app.config(['$routeProvider', 'routes', routeConfigurator]);

    function routeConfigurator($routeProvider, routes) {
        routes.forEach(function (route) {
            $routeProvider.when(route.url, route.config);
        });
        $routeProvider.otherwise({ redirectTo: '/home' });
    }

    function getRoutes() {
        return [
          {
              url: '/home',
              config: {
                  templateUrl: 'home.html',
                  controller:'home'
              }
          },
          {
              url: '/fruits',
              config: {
                  templateUrl: 'fruit.html',
                  controller:'fruits'
              }
          }
        ];
    }

    app.controller("home", ['$location',
      function($location) {
          this.goToFruits = function() {
              $location.path('/fruits');
          };
      }
    ]);

    app.controller("fruits", ['$scope', '$route', '$routeParams','$location', 
      function($scope, $route, $routeParams, $location) {

        $scope.fruitList = [
          {name:'Apple'},
          {name:'Apricot'},
          {name:'Banana'},
          {name:'Banana'},
          {name:'Bilberry'},
          {name:'Blackberry'} ];

          $scope.goBackHome= function(){
             $location.path('/home');
          };

      }
    ]);

})();