2016-09-23 12 views
1

私は4つの異なるページを持つ角型アプリケーションを持っています。各ページには独自のコントローラがあります。私はこれらのコントローラ/ページ間のデータの一部またはいくつかの共通の機能を共有したい今は2つのコントローラ間で通信します

when('/a',{ 
      templateUrl: './components/a.html', 
      controller:'aCtrl' 
    }). 
when('/b',{ 
      templateUrl: './components/b.html', 
      controller:'bCtrl' 
    }). 
when('/c',{ 
      templateUrl: './components/c.html', 
      controller:'cCtrl' 
    }). 
when('/d',{ 
      templateUrl: './components/d.html', 
      controller:'dCtrl' 
    }). 
when('/home',{ 
      templateUrl: './components/Home.html', 
      controller:homeCtrl' 
}). 

を使用して、各ページへのルートとそのコントローラのコントローラを持っているホームページがあります。どうすればこのことができますか?私は彼らがSERVICEを使用すると言うそれをgoogled。しかし、どのコントローラーにサービスを書く必要があるのか​​分かりません。誰かがこれについて良い例を挙げることができます。

答えて

2

AngularJSのサービスは、内のコントローラに書き込まれません。これはあなたのアプリケーションに直接バインドされ、アプリケーション内のどこでも使用できます。このため、サービスはAngularJSのコントローラ間で通信するための推奨手段です。あなたは、サービス内の

angular.module('yourApp').service('serviceName', function() {....});

することができます:あなたがする必要がどのような

はそうのようなサービスを記述である

  • (あなたが使用できるAPIエンドポイントからデータを取得
  • 一定のデータを定義する(これにAngularのconstantプロバイダを使用できます)
  • 新しいデータをいくつかのデータを取り込み、それを操作して返すいくつかのコードを定義し
  • あなたは、あなたのデータを今すぐ

でやりたいので、同様の依存関係など、あなたのコントローラでサービスを含め、他の

  • ほとんど何でも:

    angular.module('yourApp').controller('yourController', function (serviceName) { 
        console.log(serviceName.getData()); 
        // Do something with your data 
    }); 
    

    このコントローラでは、サービスが返すデータにアクセスできます。もちろん、同じサービスを複数のコントローラに注入することで、コントローラ間でデータを共有することができます。

  • +0

    okです。サービス( 'sServ'、['$リソース'、 '$スコープ'、 'usSpinnerService'、関数($リソース、$スコープ、usSpinnerService))を持つs​​Serv.jsを追加しました。 $ scope.test = function(){}}]);今、私のコントローラ1では、var app = angular.module( 'GMod'、['ivh.treeview'、 'angularSpinner']); geoOccApp.controller( 'gModCtrl'、['SServ '、\t function(sServ){//どのように私はrouteChangeStartまたはstartSpinまたは他の関数を呼び出すことができます}});それは私にエラーを与えています – user1015388

    +0

    'startSpin'はどこにありますか?サービス内で何かを呼びたい場合は、まずサービス本体内で 'this.startSpin'と定義し、コントローラ内で' sServ.startSpin'として使用する必要があります。 – nikjohn

    +0

    startSpinはサービスのsServ ' – user1015388

    0

    ダスチンには正しいアプローチがあります。しかし、異なるアプローチを使用することができ、AppControllerでアプリケーションをラップすることもあります。

    AppControllerにあるすべてのものにアクセスできるようになりました。このアプローチを使用して、アプリケーションの子コントローラがアクセスし、どこにでもサービスを注入する必要のない関数または定数を配置できます。

    <body ng-controller="AppController"> 
        <div ng-view></div> 
    </body> 
    
    1

    データを共有できる方法はたくさんあります。

  • サービス
  • $ rootScope
  • サービス

    1. イベントは、私たちは我々のアプリ全体のデータと機能を共有するための簡単な方法を提供します。我々が作成するサービスはコントローラや他のサービスに注入できるシングルトンなので、再利用可能なコードを書くのに理想的です。

      var app = angular.module('app', []); 
      
      app.controller('leftCtrl', function ($scope,userService) { 
      left.btnClicked = function (object) { 
          userService.saveData(object); 
      } 
      }); 
      
      app.controller('rightCtrl', function ($scope, userService) { 
      $scope.getData = userService.getData(); 
      }); 
      
      app.service('userService', function() { 
          var data = {}; 
          this.saveData = function(object){ 
          data = object; 
      } 
      
      this.getData = function(){ 
      return data; 
      } 
      }); 
      
    関連する問題