Статьи

Начало работы с мобильным угловым интерфейсом

AngularJS — одна из многих фреймворков для мобильных и веб-разработок. Мы создадим приложение с использованием Mobile Angular UI , платформы для разработки мобильных приложений HTML 5, которая сочетает AngularJS с Bootstrap. Он предоставляет основные мобильные компоненты, отсутствующие в Bootstrap 3, такие как переключатели и оверлеи и т. Д. Он не зависит от jQuery, но вместо этого опирается на библиотеки, такие как fastclick.js и fastclick.js для достижения лучшего мобильного опыта.

Начиная

Демонстрация приложения, которое мы будем создавать, доступна на Heroku . Имя пользователя [email protected] и пароль sam . Исходный код доступен на GitHub .

В этом уроке мы увидим, как разработать адаптивное мобильное приложение с использованием Mobile Angular UI. В этом руководстве предполагается, что читатель имеет базовые знания AngularJS и Bootstrap.

Загрузите и установите Mobile Angular UI, как показано ниже:

 cd mcasimir-mobile-angular-ui-90b1528 npm install grunt 

Номер версии в пути к папке может отличаться.

Направьте ваш браузер на http://localhost:3000/ и вы увидите демонстрацию Mobile Angular UI.

Создание домашнего экрана

Давайте посмотрим в папку Mobile Angular UI, которую мы скачали. Файлы, относящиеся к демонстрационной демонстрации, находятся внутри демонстрационной папки. В дополнение к файлам html и css у нас есть файл demo.js Если мы откроем demo.js мы увидим код AngularJS.

Если этот файл кажется немного сложным, не волнуйтесь. Мы попытаемся создать наше собственное маленькое приложение с нуля и расшифровать то, что находится внутри demo.js одновременно.

Для начала создайте папку с именем BucketApp внутри mcasimir-mobile-angular-ui-90b1528 . Создайте HTML-файл с именем index.html . Добавьте в текущий код:

 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <base href="/BucketApp/" /> <title>Bucket App</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimal-ui" /> <meta name="apple-mobile-web-app-status-bar-style" content="yes" /> <link rel="shortcut icon" href="/favicon.png" type="image/x-icon" /> <link rel="stylesheet" href="/dist/css/mobile-angular-ui-hover.min.css" /> <link rel="stylesheet" href="/dist/css/mobile-angular-ui-base.min.css" /> <link rel="stylesheet" href="/dist/css/mobile-angular-ui-desktop.min.css" /> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular-route.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular-touch.min.js"></script> <script src="/dist/js/mobile-angular-ui.min.js"></script> <script src="BucketApp.js"></script> </head> <body ng-app="AngularUIBucketApp"> // App Data will be here shortly 🙂 </body> </html> 

Обратите внимание на директиву ng-app в теле. Затем создайте BucketApp.js который уже включен в index.html . Добавьте этот код:

 var app = angular.module('AngularUIBucketApp', [ "ngRoute", "ngTouch", "mobile-angular-ui" ]); app.config(function($routeProvider, $locationProvider) { $routeProvider.when('/', { templateUrl: "signIn.html" }); }); 

Мы установили две вещи в коде выше. Сначала мы зарегистрировали модуль mobile-angular-ui . Мы объявили корневой маршрут для нашего приложения как signIn.html . Создайте signIn.html и оставьте его пока пустым. В index.html поместите следующий код в теги body которые будут служить основным шаблоном.

 <div class="app"> <div class="navbar navbar-app navbar-absolute-top"> <div class="navbar-brand navbar-brand-center" yield-to="title"> <span>Bucket List App</span> </div> <div class="btn-group pull-right" yield-to="navbarAction"> <div class="btn btn-navbar"> <i class="fa fa-plus"></i> New </div> </div> </div> <div class="navbar navbar-app navbar-absolute-bottom"> <div class="btn-group justified"> <a href="#" class="btn btn-navbar btn-icon-only"><i class="fa fa-home fa-navbar"></i></a> <a href="#" class="btn btn-navbar btn-icon-only"><i class="fa fa-list fa-navbar"></i></a> </div> </div> <div class="app-body"> <ng-view class="app-content"></ng-view> </div> </div> 

В приведенном выше коде большая часть кода не требует пояснений. Последний div может вызвать некоторую путаницу. Он содержит директиву ngView, которая отображает шаблоны текущего маршрута в index.html .

Перезагрузите сервер, укажите в браузере http://localhost:3000/BucketApp/ и вы должны увидеть базовый шаблон приложения. Вот как это должно выглядеть:

Пример главного экрана

Далее, внутри нашего базового шаблона нам нужно включить форму входа. Откройте signIn.html и signIn.html следующий HTML- signIn.html :

 <div class="scrollable"> <div class="scrollable-content section"> <form action="" id="" ng-submit="signin()"> <div bs-panel title=""> <input bs-form-control type="text" ng-model="user.username" label="" label-class="col-xs-3 col-sm-2 col-lg-1" class="col-xs-10 col-sm-11 col-lg-12" placeholder="Username" /> <input bs-form-control type="password" ng-model="user.password" label="" label-class="col-xs-3 col-sm-2 col-lg-1" class="col-xs-10 col-sm-11 col-lg-12" placeholder="Password" /> <button type="submit" id="btnSignIn" class="btn btn-primary" data-style="expand-right"> Sign In </button> </div> </form> </div> </div> 

Несколько вещей, на которые следует обратить внимание — это директивы ngSubmit и ngModel в HTML-коде. Мы должны привязать ввод имени пользователя и пароля к $ scope . При signIn формы она проверяет пользователя и вызывает функцию signIn в signIn . Давайте определим это в BucketApp.js как показано ниже:

 app.controller('MainController', ['$scope', function($scope) { // Initialized the user object $scope.user = { username: "", password: "" }; // Sign In auth function $scope.signin = function() { var email = $scope.user.username; var password = $scope.user.password; if (email &amp;&amp; password) { // Sign In Logic } } } ]); 

Добавьте директиву ngController к тегу body в index.html как показано ниже:

 <body ng-app="AngularUIBucketApp" ng-controller="MainController"> 

Прежде чем передавать имя пользователя и пароль в функцию signin , нам нужно проверить наличие пустых значений. Мы будем использовать ngDisabled для включения / выключения кнопки входа . Добавьте атрибут ng-disabled к кнопке signIn.html в signIn.html как показано ниже:

 ng-disabled = "user.username==undefined||user.username=='' || user.password=='' || user.password==undefined" 

Мы будем использовать Firebase в качестве бэкенда нашего приложения. Чтобы использовать Firebase, сначала необходимо зарегистрироваться для бесплатной учетной записи. После регистрации вы получите URL-адрес Firebase. В моем случае URL-адрес Firebase является

 https://burning-fire-1723.firebaseio.com 

Включите следующие сценарии BucketApp.js в index.html перед BucketApp.js :

 <script src="https://cdn.firebase.com/js/client/1.0.18/firebase.js"></script> <script src="https://cdn.firebase.com/libs/angularfire/0.8.0/angularfire.min.js"></script> <script src="https://cdn.firebase.com/js/simple-login/1.6.2/firebase-simple-login.js"></script> 

Мы будем реализовывать простой вход в систему, используя идентификатор электронной почты и пароль. Включите модуль firebase в приложение, заменив код в верхней части BucketApp.js :

 var app = angular.module('AngularUIBucketApp', [ "ngRoute", "ngTouch", "mobile-angular-ui", "firebase" ]); 

Затем вставьте $firebaseSimpleLogin в наш контроллер и определите объект аутентификации firebase. Замените наш текущий код контроллера в BucketApp.js :

 app.controller('MainController', ['$scope','$firebaseSimpleLogin', function($scope,$firebaseSimpleLogin) { // Init Firebase var ref = new Firebase("https://burning-fire-1723.firebaseio.com"); var auth = $firebaseSimpleLogin(ref); // Initialized the user object $scope.user = { username: "", password: "" }; // Sign In auth function $scope.signin = function() { var email = $scope.user.username; var password = $scope.user.password; if (email &amp;&amp; password) { // Sign In Logic } } } ]); 

Нам нужно включить Simple Login вход из Firebase, чтобы использовать эту функцию. Войдите в Firebase и выберите вкладку Simple Login вход в Simple Login с левой стороны. Из перечисленных вкладок выберите Email & Password и установите флажок. Добавьте нового пользователя с идентификатором электронной почты и паролем.

Firebase предоставляет метод login который мы будем использовать для аутентификации. Измените функцию signin на signin :

 $scope.signin = function() { var email = $scope.user.username; var password = $scope.user.password; if (email &amp;&amp; password) { // Sign In Logic auth.$login('password', { email: email, password: password }) .then(function(user) { // On success callback console.log('Username and password found'); }, function(error) { // On failure callback console.log('Username and password not found'); }); } } 

Перезапустите сервер, укажите в браузере http://localhost:3000/BucketApp и вы должны увидеть страницу входа, как показано ниже:

Экран входа

Попробуйте войти, используя учетные данные пользователя, которого вы добавили в firebase. Если все идет хорошо, вы должны увидеть сообщение об успехе в консоли браузера.

Создание домашней страницы пользователя

Создайте новый HTML-файл с именем userHome.html со следующим кодом:

 <div class="container"> <div class="jumbotron"> <h1>Welcome !!</h1> <p class="lead"><i>{{userEmailId}}</i> Here is your Dashboard</p> </div> </div> 

Добавьте страницу userHome.html в app.config в BucketApp.js как показано ниже:

 $routeProvider.when('/userHome', { templateUrl: 'userHome.html' }); 

Когда пользователь успешно войдет в систему, он будет перенаправлен в /userHome . Измените код контроллера для добавления службы $ location, как показано ниже:

 app.controller('MainController', ['$scope','$firebaseSimpleLogin','$location', function($scope,$firebaseSimpleLogin,$location) { 

В signin в signin нам нужно установить $scope.userEmailId из возвращенного user объекта и затем перенаправить в /userHome . Вот недавно добавленный код:

 console.log('Username and password found'); $scope.userEmailId = user.email; $location.path('/userHome'); 

Перезагрузите сервер и попробуйте войти в систему. При успешном входе вы будете перенаправлены в /userHome с приветственным сообщением, как показано ниже:

Домашняя страница пользователя

Затем откройте index.html и замените следующий div

 <div class="btn-group pull-right" yield-to="navbarAction"> <div class="btn btn-navbar"> <i class="fa fa-plus"></i> New </div> </div> 

с:

 <div class="btn-group pull-right" yield-to="navbarAction"> <div class="btn btn-navbar"> <i class="fa"></i><a ng-click="showSignUp()" ng-hide="loggedIn" class="btn">SignUp</a><a ng-click="logout()" ng-show="loggedIn" class="btn">Logout</a> </div> </div> 

Когда гостевой пользователь загружает приложение, оно отображает ссылку SignUp в верхнем правом углу, а когда пользователь входит в систему, он SignUp ссылку выхода из Logout .

Мы использовали директивы ngHide и ngShow для переключения дисплея. Теперь, когда пользователь $scope.loggedIn в систему, мы установим для $scope.loggedIn значение true и наоборот.

Добавьте следующий код к $scope.signin функции $scope.signin :

 $scope.loggedIn = true; 

Также определите функцию logout из logout и showSignUp как показано ниже:

 $scope.logout = function() { $scope.loggedIn = false; // to toggle display of SignUp/Logout $scope.user = { // re init the user object username: "", password: "" }; $location.path('/'); // redirect to home page after logout } $scope.showSignUp = function() { $scope.user = { // re init the user object username: "", password: "" }; $location.path('/signUp'); // redirect to SignUp page } 

Перезапустите сервер и укажите в браузере http://localhost:3000/BucketApp/ и попробуйте http://localhost:3000/BucketApp/ .

Вывод

В этом руководстве мы сосредоточились на том, как начать разработку мобильного веб-приложения с использованием Mobile AngularUI. В следующем уроке мы пойдем дальше, реализовав интерфейс SignUp чтобы добавить элементы в наш список SignUp и интегрировать SignUp в наше приложение. Мы также поиграем с некоторыми другими компонентами, предлагаемыми Mobile Angular UI .