27

以下は問題なく動作しますが、これにより$ httpProviderがグローバルに変更されると思いますが、これは私が望んでいることではありません。

angular.module('SessionService', ['ngResource'])
    .config(function($httpProvider){
        $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'
    })
    .factory('Login', function($resource){
        var resource = $resource('/adminui/login',{},{
            post:{
                method:"POST",
                isArray:false
            },
        });
        return resource;
    })
LoginCtrl = function($scope,Login) {
    $scope.login = function(){
        Login.post($.param({user:$scope.user.username,password:$scope.user.password}),$.noop,$.noop)
    }
}

代わりにこれを行う方法はありますか?

...
    .factory('Login', function($resource){
        var resource = $resource('/adminui/login',{},{
            post:{
                method:"POST",
                isArray:false,
                headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} // ignored
            },
        });
        return resource;
    })

「headers」パラメータは無視されているようです。リクエストはまだです

Content-Type:application/json;charset=UTF-8

ヘッダーの値は大丈夫ですか?

4

3 に答える 3

63

1.1.3が実際にこれをサポートしていることを確認しました。ただし、1.1.3バージョンのリソースサービスも取得していることを確認する必要があります。の簡単なテスト:

angular.module('myApp', ['ngResource']).
  config(['$routeProvider', function($routeProvider) {
    $routeProvider.when('/', {templateUrl: 'partials/partial1.html',controller: 'MyController'});
    $routeProvider.otherwise({redirectTo: '/'});
  }])

  .controller("MyController", function( $scope, Bug) {
    Bug.post({test:"test"});
  })

  .factory('Bug', function($resource){
    var resource = $resource('/bug',{},{
        post:{
            method:"POST",
            isArray:false,
            headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} 
        },
    });
    return resource;
});

これにより、ヘッダーが(Chromeを使用して確認済み)に設定されたリクエストが作成されます。

Content-Type:application/x-www-form-urlencoded; charset=UTF-8

簡単に言うと、angular-resource.jsのダウンロードが見つからなかったため、ダウンロードするにはgithubWebサイトにアクセスする必要がありました。ここにあります

いくつかの笑いのために、私はフィドルを作成しました。POST呼び出しは失敗しますが、そのヘッダーは正しく設定されていることに注意してください。フィドルの例

于 2013-04-04T02:29:46.793 に答える
20

開発ドキュメント(10月12日現在)では、$ resourceでヘッダーのオーバーライドが可能であることが示されていますが、まだリリースされていません(v1.0.2またはv1.1.0)。ただし、この機能はv1.0.xおよびmasterブランチにあります。その機能を利用するには、今のところv1.0.xブランチからビルドすることを検討してください。

ビルド方法:http://docs.angularjs.org/#H1_4

または、スナップショットビルドからプルすることもできます:http://code.angularjs.org/snapshot/

この機能は次のリリースで提供されるようです。

于 2012-10-13T20:39:26.307 に答える
3

1.1.5リソースファイル(およびその他)へのリンクを追加するだけです:http://code.angularjs.org/1.1.5/

探しているバージョンに一致するようにURLを設定できます。
例:1.1.4:http ://code.angularjs.org/1.1.4/

于 2013-06-17T17:54:14.387 に答える