AngularJS - Приложение LastFm: Создание приложения для discovery музыки
Введение
Здравствуйте,野心勃勃ые программисты! Сегодня мы отправимся в увлекательное путешествие в мир веб-разработки. Мы создадим приложение для discovery музыки, используя AngularJS и API LastFm. Не волнуйтесь, если вы никогда раньше не программировали – я буду с вами на каждом шагу, как я делал для countless студентов на протяжении многих лет преподавания. Погружаемся!
Что такое AngularJS?
Прежде чем мы начнем программировать, давайте поймем, что такое AngularJS. Представьте, что вы строите дом. AngularJS как каркас этого дома – он предоставляет структуру и поддержку для вашего веб-приложения. Это мощный JavaScript фреймворк, который помогает нам создавать динамические, одностраничные приложения с легкостью.
Настройка нашего проекта
Шаг 1: Создание HTML структуры
Давайте начнем с создания базовой структуры нашего приложения. Откройте ваш любимый текстовый редактор и создайте новый файл под названием index.html
. Вот что мы туда положим:
<!DOCTYPE html>
<html ng-app="lastfmApp">
<head>
<title>LastFm Music Discovery</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainController">
<h1>LastFm Music Discovery</h1>
<input type="text" ng-model="artistName" placeholder="Введите имя исполнителя">
<button ng-click="searchArtist()">Искать</button>
<div ng-if="artist">
<h2>{{artist.name}}</h2>
<p>{{artist.bio.summary}}</p>
</div>
</body>
</html>
Давайте разберем это:
-
ng-app="lastfmApp"
: Это говорит AngularJS, что это корневой элемент нашего приложения. -
ng-controller="MainController"
: Это specifies, который контроллер должен обрабатывать логику для этой части нашего приложения. -
ng-model="artistName"
: Это связывает поле ввода с переменнойartistName
в нашем контроллере. -
ng-click="searchArtist()"
: Это говорит AngularJS вызывать функциюsearchArtist()
, когда кнопка нажата. -
ng-if="artist"
: Это отображает информацию об исполнителе только в том случае, если исполнитель найден.
Шаг 2: Создание AngularJS приложения
Теперь давайте создадим наше AngularJS приложение. Создайте новый файл под названием app.js
и добавьте следующий код:
var app = angular.module('lastfmApp', []);
app.controller('MainController', function($scope, $http) {
$scope.searchArtist = function() {
var apiKey = 'YOUR_LASTFM_API_KEY';
var apiUrl = 'http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=' + $scope.artistName + '&api_key=' + apiKey + '&format=json';
$http.get(apiUrl).then(function(response) {
$scope.artist = response.data.artist;
});
};
});
Давайте разберем это:
- Мы создаем AngularJS модуль под названием
lastfmApp
. - Мы определяем контроллер под названием
MainController
. - Внутри контроллера мы определяем функцию
searchArtist
, которая делает HTTP запрос к API LastFm. - Мы используем
$scope
, чтобы сделать переменные и функции доступными для нашего HTML. - Мы используем
$http
для выполнения API запроса.
Понимание концепций AngularJS
Теперь, когда у нас есть базовое приложение настроено, давайте углубимся в некоторые концепции AngularJS.
Модули
В AngularJS модули являются контейнерами для различных частей вашего приложения. Они помогают поддерживать ваш код организованным и maintainable. В нашем случае, мы создали модуль под названием lastfmApp
:
var app = angular.module('lastfmApp', []);
Контроллеры
Контроллеры – это место, где мы определяем поведение нашего приложения. Они содержат логику, которая питает наше приложение. В нашем примере, мы создали MainController
:
app.controller('MainController', function($scope, $http) {
// Логика контроллера здесь
});
Сcope
Scope – это объекты, которые ссылаются на модель. Они действуют как клей между контроллером и видом. Когда мы используем $scope
в нашем контроллере, мы делаем данные доступными для нашего HTML:
$scope.artist = response.data.artist;
Директивы
Директивы – это маркеры на DOM элементах, которые говорят AngularJS привязать определенное поведение к этому DOM элементу. Мы использовали несколько директив в нашем HTML:
ng-app
ng-controller
ng-model
ng-click
ng-if
Улучшение нашего приложения
Теперь, когда мы понимаем основы, давайте добавим несколько новых функций в наше приложение.
Отображение схожих исполнителей
Давайте изменим наш HTML, чтобы отобразить схожих исполнителей:
<div ng-if="artist">
<h2>{{artist.name}}</h2>
<p>{{artist.bio.summary}}</p>
<h3>Схожие исполнители</h3>
<ul>
<li ng-repeat="similar in artist.similar.artist">{{similar.name}}</li>
</ul>
</div>
Здесь мы используем директиву ng-repeat
, чтобы循环 по схожим исполнителям и отображать их в списке.
Добавление обработки ошибок
Давайте добавим обработку ошибок в наш контроллер:
app.controller('MainController', function($scope, $http) {
$scope.searchArtist = function() {
var apiKey = 'YOUR_LASTFM_API_KEY';
var apiUrl = 'http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=' + $scope.artistName + '&api_key=' + apiKey + '&format=json';
$http.get(apiUrl).then(function(response) {
$scope.artist = response.data.artist;
$scope.error = null;
}, function(error) {
$scope.error = "Произошла ошибка. Пожалуйста, попробуйте еще раз.";
$scope.artist = null;
});
};
});
И добавим это в наш HTML:
<p ng-if="error" style="color: red;">{{error}}</p>
Заключение
Поздравления! Вы только что создали свое первое приложение на AngularJS. Мы covered много terreno, от настройки базовой структуры до добавления функций и обработки ошибок. Помните, что обучение программированию – это путешествие, и каждое приложение, которое вы создаете, учит вас чему-то новому.
Вот таблица, резюмирующая основные концепции AngularJS, которые мы covered:
Концепция | Описание |
---|---|
Модули | Контейнеры для частей приложения |
Контроллеры | Определяют поведение приложения |
Сcope | Действуют как клей между контроллером и видом |
Директивы | Расширяют HTML с помощью пользовательских атрибутов и элементов |
Продолжайте практиковаться, продолжайте создавать, и, самое главное, продолжайте наслаждаться программированием. Before you know it, вы будете создавать сложные веб-приложения с легкостью. Счастливого кодирования!
Credits: Image by storyset