目次
fromJsonメソッドとtoJsonメソッド
promise
$http、$httpProvider服务
$http, $httpProvider サービス
ホームページ ウェブフロントエンド jsチュートリアル angularjs はレンダリングが完了したかどうかをどのように判断しますか? $httpprovider サービスでは何が起こるのでしょうか?

angularjs はレンダリングが完了したかどうかをどのように判断しますか? $httpprovider サービスでは何が起こるのでしょうか?

Sep 07, 2018 pm 04:44 PM
angularjs

この記事は angularjs についてのメモです。以前にいくつかの問題の解決策を見つけたことがありますが、今では忘れてしまったので、今これを書くと、それは次のとおりです。今すぐ使用する正しいメソッドをいくつか見てみましょう

fromJsonメソッドとtoJsonメソッド

angular.fromJson()メソッドは、jsonをオブジェクトまたはオブジェクト配列に変換することです。ソースコードは次のとおりです。以下:

    function fromJson(json) {
        return isString(json) ? JSON.parse(json) : json  
    }
ログイン後にコピー

angular .toJson() メソッドはオブジェクトまたは配列を json に変換します。 ソース コードは次のとおりです:

    function toJson(obj, pretty) {
        return "undefined" == typeof obj ? undefined : JSON.stringify(obj, toJsonReplacer, pretty ? "  " : null)  
    }
ログイン後にコピー

promise

Angular の promise は $q によって提供され、構築されます。 Promise プロジェクトを登録することで非同期実行するためのメソッドを提供します。

JS での非同期コールバックの処理は常に非常に面倒で複雑です。

// 案例1:在前一个动画执行完成后,紧接着执行下一个动画
$('xx').animate({xxxx}, function(){
    $('xx').animate({xx},function(){
        //do something
    },1000)
},1000)
ログイン後にコピー
// 案例2:jquery ajax 异步请求
$.get('url').then(function () {
    $.post('url1').then(function () {
      //do something
    });
});
ログイン後にコピー

Promise は、開発者が深くネストされた非同期コールバック関数の深淵から脱出するのに役立ちます。 Angularjs は、$q サービスを通じて Promise を提供および構築します。最も完全なケース:

   var defer1 = $q.defer();

   function fun() {
       var deferred = $q.defer();
       $timeout(function () {
           deferred.notify("notify");
           if (iWantResolve) {
               deferred.resolve("resolved");
           } else {
               deferred.reject("reject");
           }
       }, 500);
       return deferred.promise;
   }

   $q.when(fun())
       .then(function(success){
           console.log("success");
           console.log(success);
       },function(err){
           console.log("error");
           console.log(err);
       },function(notify){
           console.log("notify");
           console.log(notify);
       })
       .catch(function(reson){
           console.log("catch");
           console.log(reson);
       })
       .finally(function(final){
           console.log('finally');
           console.log(final);
       });
ログイン後にコピー

Promise 呼び出し: $q.when(fun()).then(successCallback, errorCallback, NoticeCallback); 省略形は次のとおりです: fun().then ( successCallback、errorCallback、notifyCallback); $q.when(fun()).then(successCallback, errorCallback, notifyCallback); 简写为:fun().then(successCallback, errorCallback, notifyCallback);

angularjs service封装使用:

angular.module("MyService", [])
.factory('githubService', ["$q", "$http", function($q, $http){
    var getPullRequests = function(){
    var deferred = $q.defer();
    var promise = deferred.promise;
    $http.get("url")
    .success(function(data){
        var result = [];
        for(var i = 0; i < data.length; i++){
            result.push(data[i].user);
            deferred.notify(data[i].user); // 执行状态改变通知
        }
        deferred.resolve(result); // 成功解决(resolve)了其派生的promise。参数value将来会被用作successCallback(success){}函数的参数value。
        })
    .error(function(error){
        deferred.reject(error); // 未成功解决其派生的promise。参数reason被用来说明未成功的原因。此时deferred实例的promise对象将会捕获一个任务未成功执行的错误,promise.catch(errorCallback(reason){...})。
    });
    return promise;
}

return {
    getPullRequests: getPullRequests
};
}]);

angular.module("MyController", [])
    .controller("IndexController", ["$scope", "githubService",                                function($scope, githubService){
        $scope.name = "dreamapple";
        $scope.show = true;
        githubService.getPullRequests().then(function(result){
            $scope.data = result;
        },function(error){
        },function(progress){
           // 执行状态通知 notifyCallback
        });
    }]);
ログイン後にコピー

$http、$httpProvider服务

https://docs.angularjs.org/ap...$http
https://www.cnblogs.com/keatk...

$http 是angular 封装好的 XMLHttpRequest 请求,angular 的思想偏向restful概念, 方法有:GET,POST,PUT,DELTE,PATCH,HEAD等

angular 默认的请求头:
Accept: application/json, text/plain 接受json和text
Content-Type : application/json
如果要修改默认设置的话可以在app.config上做修改

var app = angular.module("app", []);
app.config(function ($httpProvider) {           
    log(angular.toJson($httpProvider.defaults));
    $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
    $httpProvider.defaults.headers.put["Content-Type"] = "application/x-www-form-urlencoded";
    $httpProvider.defaults.headers.patch["Content-Type"] = "application/x-www-form-urlencoded";
});
ログイン後にコピー

只要是default的headers,在每次发送请求的时候都会带上。所以如果我们每个请求都有用到一些自定义的header,我们也可以写入在default.headers中。$httpProvider.defaults.headers.common["myHeader"] = "myheaderValue";//common 表示不管任何的 method POST,GET,PUT等

这些default的header是可以在每一次我们发请求的时候通过参数来覆盖掉.另外$http service 也提供了一个defaults的指针 (注: $httpProvider.defaults === $http.defaults )

$httpProvider.defaults.transformRequest & transformResponse

这是angular提供给我们的2个接口,在请求发送前和响应还没有触发callback前对post data 和 response data做一些处理它们是个数组类型,我们可以push一些函数进去 (angular默认对request和response都放入了一个方法,post的时候如果data是对象将json化,响应时如果data是json类型,将解析成对象)。在每一次的请求,我们依然可以覆盖整个数组。(想看更多就到PHP中文网AngularJS开发手册中学习)

var app = angular.module("app", []);
app.config(function ($httpProvider) {            
    $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
    $httpProvider.defaults.transformRequest.shift(); //把angular default的去掉
    $httpProvider.defaults.transformRequest.push(function (postData) { //这个function不是依赖注入哦
        if (angular.isObject(postData)) { 
            return $.param(postData); //如果postData是对象就把它转成param string 返回, 这里借用了jQuery方法
        }
        return postData;
    });
    $httpProvider.defaults.transformResponse.push(function (responseData) {
        log(angular.toJson(responseData)); //响应的数据可以做一些处理
        return "data";
    });
});
app.controller("ctrl", function ($scope, $http) {
    $http({
        method: "POST",
        url: "handle.ashx",
        data: {
            key: "value"
        },
        transformResponse: [], //每一次请求也可以覆盖default
        transformResponse: $http.defaults.transformResponse.concat([function () { return "abc" }]) //如果default要保留要concat
    }).success(function (responseData) {
        log(responseData === "abc"); //true
    });
});
ログイン後にコピー

$httpProvider.defaults.cache。angular 默认cahce = false, 一样可以通过defaults去设置每个请求。我们也可以在每次请求覆盖设置。当同时发送2个没有缓存的请求时,angular也能处理,只发送一次。

var app = angular.module("app", []);
app.config(function ($httpProvider) {
    $httpProvider.defaults.cache = true;          
});
app.controller("ctrl", function ($scope, $http) {
    //并发但是只会发送一个请求
    $http.get("handle.ashx");
    $http.get("handle.ashx");
     
    //我们可以为每次请求要不要使用缓存或者缓存数据
    $http({
        url: "handle.ashx",
        method: "GET",
        cahce: true
    });
    $http({
        url: "handle.ashx", 
        method: "GET",
        cache : false //强制不使用缓存,即使已存在
    });
});
ログイン後にコピー

$httpProvider.interceptors
(interceptors 中文是拦截的意思)。除了之前介绍过的 transform 可以对数据做一些处理, angular也提供了另外4个时刻,分别是 onRequest, onRequestFail, onResponse, onResponseFail。让我们做一些而外处理. 比如当我们server返回500的时候,可能我们想做一个通用的alert,或是request fail 的话自动调整一下config在尝试请求等等.

//interceptors是数组,放入的是可以依赖注入的方法哦!
    $httpProvider.interceptors.push(["$q", function ($q) {
        return {
            request: function (config) { //config = {method, postData, url, headers} 等                            
                return config; //返回一个新的config,可以做一些统一的验证或者调整等.
            },
            requestError: function (rejection) {                      
                return $q.reject(rejection); //必须返回一个promise对象                                              
            },
            response: function (response) {                     
                return response; //这里也可以返回 promise, 甚至是把它给 $q.reject掉
            },
            responseError: function (rejection) { //rejection = { config, data, status, statusText, headers }                
                return $q.reject(rejection); //必须返回一个promise对象                  
            }
        };
    }]);
ログイン後にコピー

transform 的执行次序是这样的 interceptors.request -> transformRequest -> transformResponse -> interceptors.responseangularjs サービスのカプセル化は次を使用します: <hr><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">// 指令 app.directive('eventNgRepeatDone', function ($timeout) {     return {         restrict: 'A',         link: function (scope, element, attr) {             if (scope.$last) {                 // $timeout(function () {                     scope.$emit('eventNgRepeatDone');                     if ($attrs.ngRepeatDone) {                         $scope.$apply(function () {                             $scope.$eval($attrs.ngRepeatDone);                         });                     }                 //});             }         }     } }); &lt;!-- 使用 --&gt; &lt;p ng-repeat = &quot;item in list track by $index&quot; event-ng-repeat-done&gt;{{item.name}}&lt;/p&gt; app.controller('myCtrl', ['$scope', function ($scope) {     $scope.$on ('eventNgRepeatDone', function () {         // doSomething     }); });</pre><div class="contentsignin">ログイン後にコピー</div></div><h2 id="http-httpProvider-サービス">$http, $httpProvider サービス</h2><blockquote>https://docs.angularjs.org/ap...$http<p>https : //www.cnblogs.com/keatk...</p> </blockquote><a href="http://php.cn/course/47.html" target="_blank">$http は、Angular によってカプセル化された XMLHttpRequest リクエストです。メソッドは GET、POST、PUT、DELTE、PATCH、HEAD に偏っています。 、など。 </a><br>angular デフォルトのリクエストヘッダー:<p class="comments-box-content"></p>Accept: application/json, text/plain json と text を受け入れます🎜Content-Type: application/json🎜 デフォルト設定を変更したい場合は、アプリ内で変更できます.config🎜rrreee🎜 デフォルトのヘッダーである限り、リクエストが送信されるたびに含まれます。したがって、リクエストごとにカスタム ヘッダーを使用する場合は、それらをdefault.headersに記述することもできます。 <code>$httpProvider.defaults.headers.common["myHeader"] = "myheaderValue";//共通とは、POST、GET、PUT などのメソッドに関係なく使用できることを意味します。🎜🎜これらのデフォルトのヘッダーは使用できますリクエストを送信するたびに、パラメータを通じてリクエストをオーバーライドします。さらに、$http サービスはデフォルトへのポインタも提供します (注: $httpProvider.defaults === $http.defaults)🎜🎜🎜$httpProvider.defaults.transformRequest。 &transformResponse🎜 🎜 🎜これらは angular によって提供される 2 つのインターフェイスで、リクエストが送信される前、および応答がコールバックをトリガーする前に、投稿データと応答データに対して何らかの処理を行います。これらは配列型であり、いくつかの関数をプッシュできます。それら(angularのデフォルトではリクエストとレスポンスにメソッドが入れられています。ポスト時にデータがオブジェクトの場合はjsonに変換されます。レスポンス時にデータがjson型の場合はオブジェクトに解析されます) 。リクエストのたびに、配列全体を上書きすることができます。 (さらに詳しく知りたい場合は、PHP 中国語 Web サイト🎜AngularJS 開発マニュアル🎜 にアクセスして学習してください)🎜rrreee🎜$httpProvider.defaults.cache。 Angular のデフォルトの cahce = false ですが、デフォルトを使用して各リクエストを設定することもできます。リクエストごとに設定をオーバーライドすることもできます。 2 つのキャッシュされていないリクエストが同時に送信された場合、Angular はそれを処理して 1 回だけ送信することもできます。 🎜rrreee🎜🎜$httpProvider.interceptors🎜 🎜 (インターセプターは中国語で傍受を意味します)。データに対して何らかの処理を実行できる前に紹介した変換に加えて、angular は他の 4 つの瞬間、つまり onRequest、onRequestFail、onResponse、および onResponseFail も提供します。たとえば、サーバーが 500 を返したときに一般的なアラートを出したり、リクエストが失敗した場合にリクエストを試行する前に設定を自動的に調整したりするなど、外部処理を実行してみましょう。実行順序はこんな感じです interceptors.request ->transformRequest ->transformResponse ->interceptors.response🎜🎜🎜ビューがレンダリングされるかどうかを判断します🎜rrreee🎜詳細については、PHP 中国語 Web サイト 🎜AngularJS ユーザー マニュアル🎜 をご覧ください)。ご質問がある場合は、以下にメッセージを残してください。 🎜🎜🎜🎜

以上がangularjs はレンダリングが完了したかどうかをどのように判断しますか? $httpprovider サービスでは何が起こるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

入門から習得まで、2022 年の最新 5 つの angularjs チュートリアル 入門から習得まで、2022 年の最新 5 つの angularjs チュートリアル Jun 15, 2017 pm 05:50 PM

Javascript は、コードの構成、コードのプログラミング パラダイム、およびオブジェクト指向理論の点で非常にユニークな言語です。しかし、JavaScript が 20 年間主流であったとはいえ、jQuery、Angularjs、さらには React などの人気のあるフレームワークを理解したい場合は、「Black Horse Cloud Classroom JavaScript Advanced Framework」を見てください。デザインビデオチュートリアル」。

PHP と AngularJS を使用して応答性の高い Web サイトを構築し、高品質のユーザー エクスペリエンスを提供します PHP と AngularJS を使用して応答性の高い Web サイトを構築し、高品質のユーザー エクスペリエンスを提供します Jun 27, 2023 pm 07:37 PM

今日の情報化時代において、ウェブサイトは人々が情報を入手し、コミュニケーションを図るための重要なツールとなっています。レスポンシブな Web サイトはさまざまなデバイスに適応し、ユーザーに高品質のエクスペリエンスを提供できます。これは、現代の Web サイト開発のホットスポットとなっています。この記事では、PHP と AngularJS を使用して応答性の高い Web サイトを構築し、高品質のユーザー エクスペリエンスを提供する方法を紹介します。 PHP の概要 PHP は、Web 開発に最適なオープンソースのサーバー側プログラミング言語です。 PHP には、学びやすさ、クロスプラットフォーム、豊富なツール ライブラリ、開発効率など、多くの利点があります。

PHP と AngularJS を使用して Web アプリケーションを構築する PHP と AngularJS を使用して Web アプリケーションを構築する May 27, 2023 pm 08:10 PM

インターネットの継続的な発展に伴い、Web アプリケーションは企業情報構築の重要な部分となり、最新化作業に必要な手段となりました。 Web アプリケーションの開発、保守、拡張を容易にするために、開発者は開発ニーズに合った技術フレームワークとプログラミング言語を選択する必要があります。 PHP と AngularJS は非常に人気のある 2 つの Web 開発テクノロジであり、それぞれサーバー側とクライアント側のソリューションであり、これらを組み合わせて使用​​すると、Web アプリケーションの開発効率とユーザー エクスペリエンスを大幅に向上させることができます。 PHPPHPの利点

Flask と AngularJS を使用してシングルページ Web アプリケーションを構築する Flask と AngularJS を使用してシングルページ Web アプリケーションを構築する Jun 17, 2023 am 08:49 AM

Web テクノロジーの急速な発展に伴い、シングル ページ Web アプリケーション (SinglePage Application、SPA) は、Web アプリケーション モデルとしてますます人気が高まっています。従来の複数ページの Web アプリケーションと比較して、SPA の最大の利点は、ユーザー エクスペリエンスがよりスムーズであり、サーバーのコンピューティング負荷も大幅に軽減されることです。この記事では、FlaskとAngularJSを使って簡単なSPAを構築する方法を紹介します。 Flask は軽量の Py です

PHP と AngularJS を使用してオンライン ファイル管理プラットフォームを開発し、ファイル管理を容易にする PHP と AngularJS を使用してオンライン ファイル管理プラットフォームを開発し、ファイル管理を容易にする Jun 27, 2023 pm 01:34 PM

インターネットの普及に伴い、ネットワークを使用してファイルを転送したり共有したりする人が増えています。ただし、さまざまな理由により、FTP などの従来の方法をファイル管理に使用しても、現代のユーザーのニーズを満たすことができません。したがって、使いやすく、効率的で安全なオンライン ファイル管理プラットフォームを確立することがトレンドになっています。この記事で紹介するオンライン ファイル管理プラットフォームは、PHP と AngularJS をベースにしており、ファイルのアップロード、ダウンロード、編集、削除などの操作を簡単に実行でき、ファイル共有、検索、検索などの一連の強力な機能を提供します。

PHP プログラミングで AngularJS を使用するにはどうすればよいですか? PHP プログラミングで AngularJS を使用するにはどうすればよいですか? Jun 12, 2023 am 09:40 AM

Web アプリケーションの人気に伴い、フロントエンド フレームワーク AngularJS の人気も高まっています。 AngularJS は、Google が開発した JavaScript フレームワークで、動的な Web アプリケーション機能を備えた Web アプリケーションの構築に役立ちます。一方、バックエンド プログラミングの場合、PHP は非常に人気のあるプログラミング言語です。サーバーサイド プログラミングに PHP を使用している場合、PHP と AngularJS を使用すると、Web サイトにさらに動的な効果がもたらされます。

AngularJS の基本の紹介 AngularJS の基本の紹介 Apr 21, 2018 am 10:37 AM

この記事の内容は AngularJS の基本的な入門に関するもので、必要な友人に共有します。

フロントエンド開発に PHP と AngularJS を使用する方法 フロントエンド開発に PHP と AngularJS を使用する方法 May 11, 2023 pm 05:18 PM

インターネットの普及と発展に伴い、フロントエンド開発の重要性がますます高まっています。フロントエンド開発者として、私たちはさまざまな開発ツールとテクノロジーを理解し、習得する必要があります。その中でも、PHP と AngularJS は非常に便利で人気のあるツールです。この記事では、これら 2 つのツールをフロントエンド開発に使用する方法を説明します。 1. PHP の概要 PHP は、人気のあるオープン ソースのサーバー側スクリプト言語であり、Web 開発に適しており、Web サーバーやさまざまなオペレーティング システム上で実行できます。 PHP の利点は、シンプルさ、スピード、利便性です。

See all articles