溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么利用AngularJS服務接入外部API

發(fā)布時間:2021-10-19 09:44:31 來源:億速云 閱讀:110 作者:小新 欄目:web開發(fā)

這篇文章將為大家詳細講解有關怎么利用AngularJS服務接入外部API,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

如何利用AngularJS服務接入外部API

除了輕松對HTML進行擴展的能力之外,AngularJS還提供一套簡便途徑、幫助我們與外部API實現交互。在今天的教程中,我們將共同探討如何利用其服務與GitHub的API相對接,進而創(chuàng)建一套簡單的庫瀏覽器。

***步:準備工作

我們就以下面這套基礎HTML模板為起點:

<!DOCTYPE html> <html>     <head>         <title>GitHub Search</title>     </head>     <body>        </body> </html>

現在將AngularJS腳本添加到該文檔的<head>當中:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script>

在此之后,我們可以在將這套CCS樣式添加到行內或者獨立的文件當中:

* {      -webkit-box-sizing: border-box;      -moz-box-sizing: border-box;      box-sizing: border-box;      font-family: sans-serif;  }     body, html { margin: 0; }  p { margin: 0; }  input { width: 100%; }     pre {      white-space: pre-wrap;      white-space: -moz-pre-wrap;      white-space: -pre-wrap;      white-space: -o-pre-wrap;      word-wrap: break-word;  }     div.repo {      border-bottom: 1px solid;      cursor: pointer;  }     #search, #repo, #user { float: left; }  #search { width: 20%; }  #repo { width: 60%; }  #user { width: 20%; }

如大家所見,其中不存在任何多余的內容、只保留最基礎的布局方案&mdash;&mdash;將搜索欄置于右側、庫信息位于中央、用戶庫同樣置于右側。我們還需要將對應代碼行打包至<pre>標簽當中,此后我們還要利用它顯示README文件內容&mdash;&mdash;因為這些內容通常來自GitHub Flavored Markdown、而且其中一部分代碼行與用戶庫列表存在重疊。

當然,大家可以向其中添加更多樣式以提升成果的視覺效果&mdash;&mdash;但請注意,本教程中的截圖都采取最基本的外觀設計。

大家可以未來需要編寫的JavaScript代碼置于本文檔的<head>當中或者為其建立獨立文件,但獨立文件仍然需要處于AngularJS腳本之下。

第二步:模塊

現在我們可以為自己的應用程序創(chuàng)建一個模塊:

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

接下來利用ngApp指令將其添加到<body>標簽當中:

<body ng-app="githubsearch">

第三步:控制器

我們還需要為自己的應用程序準備一套控制器。為了簡化創(chuàng)建流程,我們將只為應用準備一套控制器,這樣我們就不必考慮如何在不同控制器之間進行信息傳遞了:

app.controller('SearchController', function SearchController($scope) {         });

第四步:基礎服務

我們需要對自己的GitHub服務進行定義:

app.factory('GitHub', function GitHub($http) {      return {         };  });

我們將使用app.factory()方法,這樣就能保證返回對象附帶幾個以后將會用到的方法。我們將使用$http服務從GitHub的API中獲取數據。

第五步:搜索庫

我們服務中的***項方法負責利用GitHub API對庫進行搜索。使用服務非常簡單(這項函數能夠進入由制造函數返回的對象):

searchRepos: function searchRepos(query, callback) {      $http.get('https://api.github.com/search/repositories', { params: { q: query } })          .success(function (data) {              callback(null, data);          })          .error(function (e) {              callback(e);          });  }

$http.get()方法是執(zhí)行GET請求的一種捷徑。***條參數是我們希望訪問的URL。第二條參數則代表一個具備選項的對象。這里我們只需要params對象&mdash;&mdash;它是一個查詢參數散列,將被添加到該請求當中(其中q參數屬于搜索字符串,大家可以點擊此處了解更多相關信息)。

$http.get()會返回一項承諾。我們可以將監(jiān)聽器附加在success()與error()上,并且據此調用回調函數。

第六步:搜索欄

為了使用我們在之前幾步中定義完成的函數,我們需要在自己的HTML當中添加搜索欄。相關代碼非常簡單,如下所示:

<div id="search">     <input ng-model="query" placeholder="search" ng-keyup="$event.keyCode == 13 && executeSearch()">     <div class="repo" ng-repeat="repo in repos" ng-click="openRepo(repo.full_name)">         <strong>{{ repo.full_name }}</strong>         <p>{{ repo.description }}</p>     </div> </div>

我們使用ngModel指令將該輸入欄中的值指向至Scope query變量,并在用戶按下回車鍵后利用ngKeyup調用executeSearch()函數(這樣$event.keyCode == 13就會進行比較)。我們無法在AngularJS表達式中使用條件語句,但一條簡單的邏輯運算符(AND)足以很好地完成這項任務。

在輸入域下面,我們使用ngRepeat來顯示搜索結果。我們將顯示該庫的完整名稱與描述(如果需要顯示其它不同內容,大家可以點擊此處查看GitHub API說明文檔中的可用域)。

我們還使用ngClick通過該庫的完整名稱來調用openRepo()函數,這樣我們就能顯示與之相關的信息。我們稍后再對該函數進行定義。

第七步:使用搜索功能

現在我們終于可以使用自己創(chuàng)建完成的服務了。首先,將GitHub參數添加至控制器函數(這樣該服務就能被注入到AngularJS當中):

app.controller('SearchController', function SearchController($scope) {

現在定義executeSearch()函數:

$scope.executeSearch = function executeSearch() {      GitHub.searchRepos($scope.query, function (error, data) {          if (!error) {              $scope.repos = data.items;          }      });  }

如大家所見,我們利用來自$scope.query的搜索字符串從當中調用GitHub.searchRepos(),而后在回調中將搜索結果(來自data.items)加入$scope.repos變量。

只要執(zhí)行以上步驟,我們就能順利顯示出搜索結果。在瀏覽器中打開我們的HTML文件并嘗試進行搜索:

怎么利用AngularJS服務接入外部API

第八步:獲取庫中的數據

現在我們已經獲得了搜索功能,可以顯示出庫中用戶所選定的信息內容。下面我們再創(chuàng)建一條函數,旨在通過自己的服務獲取來自庫的數據:

getRepo: function getRepo(name, callback) {      $http.get('https://api.github.com/repos/'+ name)          .success(function (data) {              callback(null, data);          })          .error(function (e) {              callback(e);          });      }

被傳遞至此函數的名稱必須為完整名稱(結構為:作者名稱、斜杠、庫名稱&mdash;&mdash;例如angular/angular.js),這是因為我們需要將其傳遞至GitHub API(點擊此處查看更多說明)。

第九步:獲取庫中的README文件

README文件中的內容并未被包含在我們利用以上函數獲取到的數據當中。相反,大家需要利用另一個API進行調用及獲取,因此我們需要創(chuàng)建以下函數:

getReadme: function getReadme(name, callback) {      $http.get('https://api.github.com/repos/'+ name +'/readme')          .success(function (data) {              callback(null, atob(data.content));          })          .error(function (e) {              callback(e);          });  }

這條函數與之前我們創(chuàng)建完畢的兩條基本相同,只不過對URL進行了變更。我們還要利用atob()函數解碼README文件的內容,因為它采用base64編碼機制。大家可以點擊此處查看GitHub API說明文檔中與獲取README文件內容相關的信息。

我們之所以沒有將這兩條請求塞進同一個函數當中,是因為某些庫根本不具備 README文件。如果我們將二者強行結合,應用程序可能因此發(fā)生故障。

第十步:顯示庫信息

我們將在另一個元素<div>當中顯示庫的完整名稱、查看過該庫的人數以及README文件:

<div id="repo" ng-show="activeRepo">     <strong>{{ activeRepo.full_name }}</strong> <em>Watched by {{ activeRepo.watchers_count }} people.</em>     <pre>{{ activeRepo.readme }}</pre> </div>

我們將把該信息保存在控制器Scope內的activeRepo變量當中。只要存在可以顯示的數據,ngShow就會將該元素顯示出來(如果不存在可以顯示的數據,我們將只能看到&lsquo;Watched by people&rsquo;文本,而且沒有任何庫被選中)。

第十一步:更新控制器

我們還需要對控制器進行更新,從而保證其切實獲取到庫數據并將其納入Scope當中。下面創(chuàng)建我們之前附加至ngClick指令的openRepo()函數:

$scope.openRepo = function openRepo(name) {      GitHub.getRepo(name, function (error, data) {          if (!error) {              $scope.activeRepo = data;                 GitHub.getReadme(name, function (error, data) {                  if (!error) {                      $scope.activeRepo.readme = data;                  } else {                      $scope.activeRepo.readme = 'No README found!';                  }              });          }      });  }

如大家所見,我們首先使用GitHub.getRepo()方法、檢查錯誤而后將該數據引入activeRepo變量。接下來,我們獲取README文件&mdash;&mdash;如果該文件不存在,我們需要向用戶提示該情況。

現在大家可以再次運行自己的應用程序并查看其實際效果:

怎么利用AngularJS服務接入外部API

第十二步:獲取用戶的庫

為了將更多功能引入到我們的應用程序當中,我們將為屏幕右方已被選定庫的持有者顯示其所有可用庫。這要求我們向服務中引入另一個方法:

getUserRepos: function getUser(name, callback) {      $http.get('https://api.github.com/users/'+ name +'/repos')          .success(function (data) {              callback(null, data);          })          .error(function (e) {              callback(e);          });  }

其內容與此前的幾條幾乎無甚差別(大家可以點擊此處查看更多與此API請求相關的信息)。

第十三步:顯示用戶的庫

這基本上相當于重現HTML中的搜索欄機制,不過我們實際需要顯示的是用戶名稱與user對象中的庫,而非輸入域或者Scope本身:

<div id="user">     <strong>{{ user.login }}</strong>     <div class="repo" ng-repeat="repo in user.repos" ng-click="openRepo(repo.full_name)">         <strong>{{ repo.name }}</strong>         <p>{{ repo.description }}</p>     </div> </div>

到了這一步,大家應該已經擁有了一套能夠切實運作的AngularJS應用程序&mdash;&mdash;它可以根據搜索字符串獲取GitHub庫。大家可以進一步對其進行迭代,例如向其中添加更多功能或者為其設計完全不同的外觀樣式。

關于“怎么利用AngularJS服務接入外部API”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI