2016-05-29 7 views
0

私はシンプルな設定をしていますが、私はおそらく "JSプログラマのように思っていません"。ページごとに複数のコントローラがあり、すべてがPHPにajaxingするルーチンを呼び出します。下の簡略化されたバージョン。それは機能していますが、私は明らかに正しく設定していません。なぜなら、これらのサービスオブジェクトをすべて1回の呼び出しに渡す必要があるからです。これはどのように設定する必要がありますか?AngularJS:サービスへのグローバルアクセス?

app.controller('ctrlA', $scope, $http, $location, $sce) { 
    app.db_read($scope, $http, {param: 1}, $sce, 
     function() {// succeeded}, 
     function() {// failed} 
    ) 
} 

app.controller('ctrlB', $scope, $http, $location, $sce) { 
    app.db_read($scope, $http, {param: 1}, $sce, 
     function() {// succeeded}, 
     function() {// failed} 
    ) 
} 
... 
app.db_read = function($scope, $http, payload, $location, $sce) { 
    $http.post('url', {request: 'read', data: payload}) 
     .then(function(data) {$scope.data = data}, 
     function(error) {$scope.displayError = $sce.trustAsHtml(error)} 
    ) 
} 

私はこの質問を見て:Instantiate global services in AngularJS ...答えは、として表示され、「サービスが角でシングルトンなので、あなたがそれらを必要とする、これまであなただけのどこにそれらを注入しなければなりません。」 残念ながら、db_read関数にサービスを "注入"する方法がわかりません。ご協力ありがとうございました。

+1

あなたが持っているものは、道オフトラックです。 Angularにはサービスであり、コントローラや指令のような別のコンポーネントに注入するモジュールコンポーネントがあります。チュートリアルやブログ記事は、Web上や、サービスの使い方についての角度のある文書サイトにたくさんあります。彼らが何であり、どのように使用されているかをより根本的に理解するために、いくつかのことを学ぶことをお勧めします。 'app.db_read'も完全にオフベースです – charlietfl

+0

答えがない場合は、なぜコメントしますか? – AngularNewbie

+0

これはコード作成またはチュートリアルサービスではないためです。それを個人的なものにしないでください...建設的な提案をあなたに与えようとしています。ウェブ開発の主要な部分の1つが研究と学習をしています...常に – charlietfl

答えて

1

あなたがリンクしている投稿に記載されているサービスは、現在あなたの機能に渡しているサービスオブジェクト(Angularで提供されているサービス)ではなくカスタムサービスです。

Angularで使用される一般的なパターンは、db_read関数をサービスオブジェクトを返すファクトリ関数に配置するために使用されます。

app.factory('dbservice', function($http) { 

    return { 
     db_read: function(payload) { 
      return $http.post('url', {request: 'read', data:payload}) 
     } 
    } 

}) 

コントローラに注入するのは工場出荷時の機能です。

<button ng-click="read({param: 1})"></button> 

またはあなたのコントローラ内から:あなたは、あなたのコントローラのテンプレートからペイロードを渡すことができます

app.controller('ctrlA', function($scope, $sce, dbservice) { 

    $scope.read = function(payload) { 
     return dbservice.db_read(payload) 
      .then(function(data) {$scope.data = data}, 
      function(error) {$scope.displayError = $sce.trustAsHtml(error)) 
    } 
}) 

var payload = {param: 1} 
    return dbservice.db_read(payload) 
     .then(function(data) {$scope.data = data}, 
      function(error) {$scope.displayError = $sce.trustAsHtml(error)) 
関連する問題