2014-02-05 47 views
0

麻煩我想預先將我的<base href="... href屬性的值預先設置爲所有獲取和發佈$http調用。我試圖用一個請求攔截如下:AngularJS請求攔截器導致我的模板UIU查看分辨率

angular.module('curriculumModule', ['ng', 'ngRoute', 'curriculumControllerModule', 'directiveModule']) 
.config(function($routeProvider, $httpProvider) { 

    $httpProvider.defaults.headers.common['Content-Type'] = 'application/json'; 
    $httpProvider.defaults.headers.common['X-Ajax'] = 'true'; 

    $httpProvider.interceptors.push(function ($q) { 
     return { 
      'request': function (config) { 
       config.url = $('base').attr('href') + '/' + config.url; 
       return config || $q.when(config); 
      } 
     }; 
    });  

    $routeProvider 
    .when('/view/:id', {controller: 'ViewCurriculumCtrl', templateUrl: 'view.html'}) 
    .when('/new', {controller: 'CreateCurriculumCtrl', templateUrl: 'new.html'}) 
    .when('/edit/:id', {controller: 'EditCurriculumCtrl', templateUrl: 'edit.html'}) 
    .when('/:curriculumId/workExperience/new', {controller: 'NewWorkExperienceCtrl', templateUrl: 'workExperiencesNew.html'}) 
    .when('/:curriculumId/workExperience/edit/:id', {controller: 'EditWorkExperienceCtrl', templateUrl: 'workExperiencesEdit.html'}) 
    .when('/:curriculumId/training/new', {controller: 'NewTrainingCtrl', templateUrl: 'trainingsNew.html'}) 
    .when('/:curriculumId/training/edit/:id', {controller: 'EditTrainingCtrl', templateUrl: 'trainingsEdit.html'}) 
    .otherwise({redirectTo:'/view/:id'}); 
}); 

然而,不知何故,AngularJs也預先考慮基地href屬性的,而我不希望templateUrls值。

我該如何預防這種情況?

+0

嘗試$( '基地')[0] .attr( 'href' 屬性)或$( '基地')EQ(0。 ).attr('href')總而言之這是一個非常醜陋的黑客 – Whisher

+0

嗨!我不確定我是否關注你。 jquery確實有效。問題是Angular將inteceptor應用於所有調用,包括對模板的調用,導致:'GET http:// localhost:8080/bignibou/view.html 404(Introuvable)' – balteo

+0

抱歉,我已經快速瀏覽了一下,但是我想知道你在做什麼嗎^^ – Whisher

回答

2

angular使用$ http服務來加載模板,所以這就是爲什麼你的攔截器正在破壞模板url。我強烈建議你在調用$ http服務之前以不同的方式修改這些URL,而不是作爲攔截器。

一個簡單的包裝服務應該這樣做,是這樣的:

angular.module('curriculumModule').service('curHttp', ['$http', function($http) { 

    this.http = function(params) { 
    params.url = $('base').attr('href') + '/' + params.url; 
    return $http(params); 

}]); 
+0

謝謝傑夫。你的解決方案非常好。我最初的問題實際上是處理不斷變化的上下文路徑。我想避免硬編碼... – balteo