2016-01-12 2 views
2

Я использую Angular UI Bootstrap v1.0.3 с включенными шаблонами (я выбрал включить шаблоны, я могу видеть модули * tpls в исходном коде), но когда я открываю модальный, как это (изнутри app.run(...)):Угловой UI Bootstrap: не загружать шаблоны

var type = "sometype"; 
$uibModal.open({ 
    templateUrl: "/partials/" + type + "-dialog.html", 
}); 

Я получаю сообщение об ошибке:

angular.min.js:93 GET http://.../uib/template/modal/backdrop.html?sessionid=363192 404 (Not Found)(anonymous function) @ angular.min.js:93r @ angular.min.js:89g @ angular.min.js:86(anonymous function) @ angular.min.js:119r.$eval @ angular.min.js:133r.$digest @ angular.min.js:130r.$apply @ angular.min.js:134g @ angular.min.js:87T @ angular.min.js:92w.onload @ angular.min.js:93 angular.min.js:107 

Error: [$compile:tpload] http://errors.angularjs.org/1.4.8/$compile/tpload?p0=uib%2Ftemplate%2Fmodal%2Fbackdrop.html&p1=404&p2=Not%20Found at Error (native) 

Я попытался добавить шаблон вручную в мой код и добавил следующий код в верхней части моих app.js:

angular.module("template/modal/backdrop.html", []).run(["$templateCache", function($templateCache) { 
    $templateCache.put("template/modal/backdrop.html", "<div class=\"modal-backdrop\"></div>"); 
}]); 

по-прежнему та же ошибка

+0

Как выглядит ваш шаблон url? – Danscho

+0

Я добавил шаблон шаблона и нашел проблему. Кэш шаблонов не работает с параметрами запроса, и у меня был перехватчик запросов, который бы добавлял параметр запроса к каждому запросу. –

ответ

4

Я нашел ошибку.

Проблема заключалась в том, что шаблон запрашивался с использованием параметров запроса, которые я добавил с помощью перехватчика запросов. Я добавил исключение из этого перехватчика, соответствующего префиксу url шаблона, и теперь он работает.

var noSessionIdUrls = [ 
    "uib/template", 
    "template" 
]; 

app.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push(function ($q, $injector, $rootScope) { 
     return { 
      request: function(config) { 
       for(var i = 0; i < noSessionIdUrls.length; i++) { 
        if(config.url.startsWith(noSessionIdUrls[i])) { 
         console.log("request interceptor: omitting session id"); 
         return config; 
        } 
       } 

       config.url = config.url + '?sessionid=' + window.sessionid; 
       return config; 
      } 
     }; 
    }); 
}]); 
Смежные вопросы