[AngularJS] --13サービスサービス

AngularJSでの多くのサービスがありますが、一般的にように、このような$ HTTP、$を場所として使用、および。

この記事では、内容を説明します:

  1 $ HTTPこの角度が提供するサービスを利用します

  いくつかの小さな点に注意することは、サービスとサービスの概要をカスタマイズする方法2。

  $ HTTPを使用

  AngularJSは、動的な要求データをHTTPリクエストを送信するために$ HTTP、さまざまなサービスを提供してくれます。

  これは、プログラムのソースコード、または通常のコードと同じビューの側面を見て、コードを実行するためのWebコンテナを使用する必要があります:

<div ng-controller="myAppCtrl">
            <ul>
                <li ng-repeat="user in users">
                    {{user.name}}
                </li>
            </ul>
        </div>

  出力データの周期と順不同リスト要求を作成します。

  JSでは、テンプレート上のコントローラを作成して、テンプレートを作成します。

<script type="text/javascript">
            var myAppModule = angular.module("myApp",[]);

            myAppModule.controller('myAppCtrl',['$scope','$http',function($scope,$http){
                $http({
                    method:'GET',
                    url:'data.json'
                }).success(function(data,status,headers,config){
                    console.log("success!...");
                    console.log(data);
                    $scope.users = data;
                }).error(function(data,status,headers,config){
                    console.log("error!...");
                });
            }]);
        </script>

  通常の通常のものより注入パラメータ$ HTTP以外のコントローラのコントローラは、このパラメータを追加するには、あなたが直接内部のメソッドを呼び出すことができます。

  形式は次のとおりです。

$http({
  method:'GET',//http请求的类型
  url:'data.json'//请求的地址
}).success(function(data,status,headers,config){
  //成功了,怎么做
}).error(function(data,status,headers,config){
  //失败了,怎么做
});

  我々は同じコードパス、ファイル作成data.jsonで必要な次

[{
    "name":"test1"
},{
    "name":"test2"
},{
    "name":"test3"
}]

  本明細書で使用される、Webコンテナを使用して、それが、結果を表示するには、Webページ内の適切なURLを入力して開始した後、HTTPサーバのnodejsを基づいています。

  すべてのコードは示しています。

<!doctype html>
<html ng-app="myApp">
    <head>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
         <script src="http://apps.bdimg.com/libs/angular.js/1.2.16/angular.min.js"></script>
    </head>
    <body>
        
        <div ng-controller="myAppCtrl">
            <ul>
                <li ng-repeat="user in users">
                    {{user.name}}
                </li>
            </ul>
        </div>

        <script type="text/javascript">
            var myAppModule = angular.module("myApp",[]);

            myAppModule.controller('myAppCtrl',['$scope','$http',function($scope,$http){
                $http({
                    method:'GET',
                    url:'data.json'
                }).success(function(data,status,headers,config){
                    console.log("success!...");
                    console.log(data);
                    $scope.users = data;
                }).error(function(data,status,headers,config){
                    console.log("error!...");
                });
            }]);
        </script>
    </body>
</html>
コードの表示

 

  非常に基本的な、あまりにも多くの説明を行うされていない$ HTTPコンテンツを使用してください。

  独自のサービス・サービスを作成します。

  その後、独自のサービスを作成する方法を見て、次の3つの方法でサービスを作成することができます工場の、プロバイダやサービスが、その本質はプロバイダですが、それを書くのさまざまな方法をカプセル化します。

  本論文では、工場の形でまだに基づいてサービスモジュールを作成し、モジュールを作成することです:

var myAppModule = angular.module("myApp",[]);

            myAppModule.factory('myService',['$http',function($http){
                var doRequest = function(username){
                    return $http({
                        method:'GET',
                        url:'data.json'
                    });
                }
                return {
                    userList:function(username){
                        return doRequest(username);
                    }
                }
            }]);

  解析コード:

  サービスは、プロパティを注入する必要がある  の$ HTTPを メソッド内で、メソッドの戻り値は、外部からユーザリストを提供しています、。

  外部  USERLIST(ユーザー名) 、通話モード。

  一部の真の実現  doRequestが 、内部は$ HTTPリクエストのAngularJSの典型的なもので、要求は、URLに対応するデータを返します。

  次に、どのように外部の使用を見てビューの部分を見てみましょう:

<div ng-controller="myAppCtrl">
            <label>username</label>
            <input type="text" ng-model="username" placeholder="输入"/>
            <pre ng-show="username">
                {{users}}
            </pre>
        </div>

  入力部は、それらが共同で変数名を使用して、入力ボックスコードボックスとプレ。ユーザ名が値を持っている場合は、以下のユーザーに対応するコンテンツが表示されます。

myAppModule.controller('myAppCtrl',['$scope','$timeout','myService',
                function($scope,$timeout,myService){
                    var timeout;
                    $scope.$watch('username',function(newUserName){
                        console.log("您输入了:"+newUserName);
                        if(newUserName){
                            if(timeout){
                                $timeout.cancel(timeout);
                            }
                            timeout = $timeout(function(){
                                myService.userList(newUserName).success(function(data){
                                    console.log(data);
                                    $scope.users = data;
                                });
                            },350);
                        }
                    });
                }
            ]);

  対応するコントローラでは、使用して$ウォッチを監視し、この監視方法ユーザー名プロパティの変更を。場合は、ユーザー名のプロパティの変更は、要求メソッドをトリガー。

  エントリの時間を制御するために使用されるマルチ噴射$タイムアウト変数の制御装置。観察コード$タイムアウト(関数(...)、 350); 入力間隔は350msのを超えた場合、対応する機能をトリガする(...)関数をこれは事実上、ジッタの原因となるページを更新し、リフレッシュ要求を停止し、防ぐことができます。

  関数内で提供する当社独自のサービスを呼び出すUSERLIST方法を。リクエストが成功すると、戻り値はバインドするユーザーをして。ユーザーがコンテンツを動的に更新します。

  デモを見るプログラムの結果:

  テストはそれを見つけた:ときに我々の高速入力4321は、$時計が変数の変化を監視しているが、唯一の要求を送信する前以上350msのために停止しました。

  すべてのコードサンプル:

<!doctype html>
<html ng-app="myApp">
    <head>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
         <script src="http://apps.bdimg.com/libs/angular.js/1.2.16/angular.min.js"></script>
    </head>
    <body>
        
        <div ng-controller="myAppCtrl">
            <label>username</label>
            <input type="text" ng-model="username" placeholder="输入"/>
            <pre ng-show="username">
                {{users}}
            </pre>
        </div>

        <script type="text/javascript">
            var myAppModule = angular.module("myApp",[]);

            myAppModule.factory('myService',['$http',function($http){
                var doRequest = function(username){
                    return $http({
                        method:'GET',
                        url:'data.json'
                    });
                }
                return {
                    userList:function(username){
                        return doRequest(username);
                    }
                }
            }]);

            myAppModule.controller('myAppCtrl',['$scope','$timeout','myService',
                function($scope,$timeout,myService){
                    var timeout;
                    $scope.$watch('username',function(newUserName){
                        console.log("您输入了:"+newUserName);
                        if(newUserName){
                            if(timeout){
                                $timeout.cancel(timeout);
                            }
                            timeout = $timeout(function(){
                                myService.userList(newUserName).success(function(data){
                                    console.log(data);
                                    $scope.users = data;
                                });
                            },350);
                        }
                    });
                }
            ]);
        </script>
    </body>
</html>
コードの表示

 

  カスタムサービスについて、次の点に注意を払う必要があります。

  1の使用シナリオ:一般的な抽出方法呼び出されたサービスでは、同じ機能が複数のコントローラから抽出することができるので、サービスフォーム。

  2 シングルトン:シングルトンサービスは、アプリケーションのライフサイクルのものであり、サービスのインスタンスは1つだけです。

  3 インジェクタ:サービスの例は、すべてのインジェクターインジェクターを作成しています。私たちは、コントローラのコントローラを作成すると、バックmyServiceというサービスを注入する必要性を指摘し、インジェクタは、サービスをインスタンス化するために行くだろう。

  参照

  [1]砂漠貧しい需要、ムークラスのネットワークます。http://www.imooc.com/learn/156

ます。https://my.oschina.net/u/204616/blog/545165で再現

おすすめ

転載: blog.csdn.net/weixin_34348174/article/details/91990155