2016-09-23 6 views
0

ここに、私がしようとしていることの簡単な例があります。私は、すでに作成されたプロジェクトで3週間メンテナーとして働いていたと言ってこれを序文します。私はコントローラーとビューとモデルで作業することができます。しかし、依存性注入を理解する時間が来たら、私は漠然としたエラーで悩まされています。今、Injectorの仕組みを学ぶ必要がある時が来たので、ここでは自分の学習目的のために構築した小さなテストアプリを紹介します。私は実際にこれがアングルアプリを構築する正しい方法であるかどうかは分かりません。私はよく分かりにくいドキュメントを見つけました。角度依存性注入。私は間違って何をしてるの?

HTML

<div ng-app="app"> 
<div ng-controller="EC as e"> 
</div> 
</div> 

私は私のコントローラのコンストラクタは、それらのサービスで呼び出されることを保証するだろうラインEC.$inject = ['$scope','$http','$window'];、または何でも彼らは呼ばれて地獄を想定していた

var app = angular.module('app',[]); 

app.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push(function($q, $window) { 
     return { 
      'request': function(config) { 
       config.headers['Authorization'] = 'bearer '+ $window.localStorage.token; 
       return config; 
      } 
     }; 
    }); 
}]); 

function EC($scope,$http,$window) { 

    var vm = this; 

    vm.api = function(resource){ 
     return ('https://api.website.com/v1/'+resource).replace('//','/'); 
    }; 

    $window.localStorage.token = 'foobar'; 

    $http.put(vm.api('/users/me'), { loggedIn: true }).then(function(response){ 

     $http.get(vm.api('/users/me')).then.function(response){ 
      vm.user = response.data; 
     }); 

    }); 

} 

EC.$inject = ['$scope','$http','$window']; 

app.controller('EC',EC); 

app.run(); 

のjavascript 、引数として。どうやらそれはそうではない。誰かが私のように私に説明することはできますか?5これはどのように動作するのですか、なぜ私はエラーが発生していますか?

エラーメッセージ:

Error: [$injector:modulerr] http://errors.angularjs.org/1.5.6/$injector/modulerr 

答えて

1

それはちょうど悪いマークアップです。コード

変更作業かを示すFiddle

.then(function(response) { 
     vm.user = response.data; 
+0

実際の問題は、私が$ httpのために余分なファイルを含める必要があることを知らなかったということです。あなたのフィドルは実際に何が間違っているのかを別の方法で示しています。私が提供したコードはちょうどダミーなので、構文エラーは問題を説明するための簡単な例を作るための私の努力の中で赤い鳴き声でした。不足しているリソースを適用した後、私のコードは動作します。私はあなたの努力に感謝します。 – r3wt

+1

これは100%あなたの注射の問題でした。私は間違いなくコードに間違ったことがあります。 – Nix

+0

あなたは$ http – Nix

1

.then 
     .function(response) { 
     vm.user = response.data; 

は、より多くのconventionaly注入に従うことをコントローラブロックを書き直し。 yaのために運動するかもしれない。また、$ http呼び出しからダブルレスポンスコールバックを削除し、$ http.get()約束を返しました。

angular.module('app', []) 



.config(['$httpProvider', function($httpProvider) 
{ 
    $httpProvider.interceptors.push(function($window) 
    { 
    return { 
     request: function(config) 
     { 
     config.headers['Authorization'] = 'bearer '+ $window.localStorage.token; 
     return config; 
     } 
    }; 
    }); 
}]) 



.controller('EC', ['$scope', '$http', '$window', function($scope, $http, $window) 
{ 
    var buildApiString = function(resource) 
    { 
    return ('https://api.website.com/v1/'+resource).replace('//','/'); 
    }; 


    $window.localStorage.token = 'foobar'; 


    $http.put(buildApiString('/users/me'), { loggedIn: true }).then(function() 
    { 
    return $http.get(buildApiString('/users/me')).then(function(response) 
    { 
     $scope.user = response.data 
    }); 
    }); 
}]); 
関連する問題