Маршрут с несколькими модулями, встроенные представления не работают - возможно, перехватчик $http вызывает ошибки

Я работаю в проекте с Angular.

Идея состоит в том, чтобы иметь разные модули, и каждый из них сможет регистрировать свои собственные маршруты. Все частичные элементы будут находиться в одном и том же встроенном HTML. Однако он не работает...

Вот планкр http://plnkr.co/edit/n3q1FW95LD24XqTF37aZ

Код примерно такой:

<body ng-class="{loaded: loaded}" ng-app="Stream" ng-controller="StreamCtrl">
  <div id="wrapper" ng-show="loaded">
    <div ng-view></div>
  </div>
  <script type="text/ng-template" id="welcome.html">
    From the template
  </script>
</body>

И JS:

(function() {
  "use strict";

  angular.module("Default", ["ngRoute"])
    .config(
      ["$httpProvider", "$routeProvider", "$locationProvider",
      function ($httpProvider, $routeProvider, $locationProvider) {
        $routeProvider
          .when("/mee", {
            templateUrl: "partials/welcome.html"
          })
          .when("/mee/index", {
            templateUrl: function(params){
              console.log("Getting partial url");
              return "partials/welcome.html"
            }
          })
        ;

      }
    ])
    ;
})();
(function() {
  "use strict";
  angular.module("Stream", [
    "Default"
  ])
  .config(["$locationProvider", function($locationProvider) {
  }])
  .run(function($rootScope, $log, $window) {
    $log.info("Setting the application status as loaded!");
    $rootScope.loaded = true;
  });
})();

Полный неработающий код можно увидеть в plunkr...




Ответы (1)


Наконец-то я смог найти ответ...

Оказывается, на запросы к шаблонам (даже если они кэшируются) влияют перехватчики $http.

Работа plunkr здесь:

http://plnkr.co/edit/RoUhkiGP9RzCfUc6Pc3v?p=preview

Это перехватчик, который влиял на разрешение данных.

    $httpProvider.interceptors.push(function($q) {
      return {
        'response': function(response) {
           return response.data;
        },
        'responseError': function(rejection) {
          return $q.reject(rejection);
        }
      };
    });

Мне все еще нужен перехватчик. Итак, теперь это так:

    $httpProvider.interceptors.push(function($q) {
      return {
        'response': function(response) {
           if (response.config.method == "GET" && response.config.url.split(".").pop() == "html")
            return response;
           return response.data;
        },
        'responseError': function(rejection) {
          return $q.reject(rejection);
        }
      };
    });

Благодарим http://www.bennadel.com/blog/2803-ng-template-requests-are-affected-by-http-interceptors-in-angularjs.htm

Благодарим https://stackoverflow.com/a/25060769/1339973 за решение проблемы с перехват $http, когда шаблон

person Cito    schedule 22.04.2015