2017-11-18 92 views
1

我剛剛使用Yeoman構建了我的第一個AngularJS應用程序。我已經做到了,像這樣:將標題添加到由Yeoman創建的AngularJS應用程序中的所有請求

$ yo angular frontend 

其結果是,我有一大堆標準的文件夾和文件等:

- app 
    - images 
    - scripts 
     app.js 
    - styles 
    - views 
    index.html 
    ... 
- bower_components 
- node_modules 
- test 

好像我不得不改變app.js文件以便爲所有請求添加標題。但是我對AngularJs非常陌生,我不知道我該怎麼做。現在,app.js的樣子:

angular 
    .module('frontend', [ 
     ... 
    ]) 
    .config(function($routeProvider){ 
     $routeProvider 
      .when(...) 
    }); 

我想,我需要設置$httpProvider,但我怎麼能做到這一點?

+0

啓動(https://docs.angularjs.org/api/ng/provider/$httpProvider) – charlietfl

回答

1

您應該爲此使用interceptor。下面是從AngularJS文檔的推薦方式:

// register the interceptor as a service 
$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { 
    return { 
    // optional method 
    'request': function(config) { 
     // do something on success 
     return config; 
    }, 

    // optional method 
    'requestError': function(rejection) { 
     // do something on error 
     if (canRecover(rejection)) { 
     return responseOrNewPromise 
     } 
     return $q.reject(rejection); 
    }, 



    // optional method 
    'response': function(response) { 
     // do something on success 
     return response; 
    }, 

    // optional method 
    'responseError': function(rejection) { 
     // do something on error 
     if (canRecover(rejection)) { 
     return responseOrNewPromise 
     } 
     return $q.reject(rejection); 
    } 
    }; 
}); 

$httpProvider.interceptors.push('myHttpInterceptor'); 

所有你需要做的是落實'request'方法,因爲所有的方法都是可選的。提供的配置對象是一個角度爲$http的配置對象,它包含一個headers屬性。你應該能夠很輕鬆地添加你的頭到這一點:

config.headers.myHeader = myValue; 
return config; 

你可以抓住在你的配置博客的$httpProvider簡單地將其添加到參數列表:

angular 
    .module('frontend', [ 
     ... 
    ]) 
    .config(function($routeProvider, $httpProvider, $provide){ 
     $routeProvider 
      .when(...) 

     // register the interceptor as a service 
     $provide.factory('myHttpInterceptor', function() { 
      return { 
      // optional method 
      'request': function(config) { 
       config.headers.myHeader = myValue; 
       return config; 
      }, 
      }; 
     }); 

     $httpProvider.interceptors.push('myHttpInterceptor'); 
    }); 
+0

我應該把這個代碼在'應用程序。 js' fil è?如果我使用了這樣一個'攔截器',那麼爲所有請求設置一些任意頭部的正確方法是什麼?我想,我應該編輯'request'方法? – Jacobian

+0

也可以在不需要攔截器的情況下設置默認值 – charlietfl

+0

@charlietfl。你會如此友善,給一個代碼片段,我應該添加到我的app.js文件來設置一個頭,使用默認值?謝謝! – Jacobian

1

更好的解決方案,以增加在所有的請求頭是readung的[$ httpProvider文檔]

app.run(['$http', function ($http) { 
    $http.defaults.headers.common['myHeader'] = 'myHeaderValue'; 
}]); 
相關問題