1

我正在使用 Angular 进行项目。

这个想法是有不同的模块,每个模块都可以注册自己的路线。部分将全部在同一个 HTML 内联中。但是它不起作用...

这是 plunkr 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 中可以看到完整的代码不起作用...

4

1 回答 1

0

终于,我找到了答案……

事实证明,对模板的请求(即使它们被缓存)受到 $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 拦截问题提供了解决方案

于 2015-04-22T16:32:10.293 回答