Задача: создать интерфейс типа "Лента".
Скачать пример проекта
В приложенном веб-приложении Visual Studio 2013 создано два проекта:
1) Проект клиента AngularJS
2) WEB API проект, хостящийся на локальном IIS (Express) и использующий встроенную базу данных (в директории App_Data).
Также имеется пара представлений (Views): grid.html, что загружает шаблон в контент дивайдера страницы index.html.
Убедитесь, что в свойствах запуска проекта указаны следующие параметры: WEB API должен стартовать раньше, чем веб-клиент. Страница index.html будет стартовой.
Исходный код AngularJS Ribbon использует jQuery (файл jquery.officebar.js), вся остальная логика в HTML\CSS и AngularJS.
Итак, давайте сделаем следующий элемент ленты (Home):
Добавим также вкладку для работы с буфером обмена:
Еще вкладку Show с разделителем:
Теперь добавим атрибуты AngularJS:
Директивы (ng-click, ng-hide, ng-init)
Контроллер
Сопоставления
Т.к. AngularJS построен на MVC, поэтому мы можем менять компоненты без затрагивания других элементов интерфейса.
Мы может указать сопоставления с контроллером, используя объектную модель $scope:
Отработка события клика на кнопке, вызов сервиса WEB API и сопоставление возвращаемых результатов в сетку шаблона:
Обработка события клика на вкладке:
Оригинал на англ.: http://www.codeproject.com/Articles/1024688/AngularJS-RibbonBar
Скачать пример проекта
В приложенном веб-приложении Visual Studio 2013 создано два проекта:
1) Проект клиента AngularJS
2) WEB API проект, хостящийся на локальном IIS (Express) и использующий встроенную базу данных (в директории App_Data).
Также имеется пара представлений (Views): grid.html, что загружает шаблон в контент дивайдера страницы index.html.
Убедитесь, что в свойствах запуска проекта указаны следующие параметры: WEB API должен стартовать раньше, чем веб-клиент. Страница index.html будет стартовой.
Исходный код AngularJS Ribbon использует jQuery (файл jquery.officebar.js), вся остальная логика в HTML\CSS и AngularJS.
Итак, давайте сделаем следующий элемент ленты (Home):
<ul> <li class="current"> <a href="#" rel="home">Home</a> <ul> <li> </li> </ul> </li> </ul>
Добавим также вкладку для работы с буфером обмена:
<ul> <li class="current"> <a href="#" rel="home">Home</a> <ul> <li> <span>Clipboard</span> </li> </ul> </li> </ul>
Еще вкладку Show с разделителем:
<ul> <li class="current"> <a href="#" rel="home">Home</a> <ul> <li> <span>Clipboard</span> <div class="button split"> <a href="#" rel="paste"> <img src="Content/ribbon/images/paste32.png" alt="" /><span>Show</span> </a> <div> <ul> <li class="menutitle">Paste Options</li> <li><a href="#"> <img src="Content/ribbon/images/paste16.gif" alt="" />Paste</a></li> <li><a href="#">Paste special...</a></li> <li class="separator"><a href="#"> <img src="Content/ribbon/images/link16.gif" alt="" />Paste link</a></li> <li class="menutitle">Clipboard options</li> <li><a href="#">Clear clipboard</a></li> <li><a href="#"> <img src="Content/ribbon/images/pasteall16.gif" alt="" />View clipboard content</a></li> <li><a href="#">Another</a></li> </ul> </div> </div> </li> </ul> </li> </ul>
Теперь добавим атрибуты AngularJS:
Директивы (ng-click, ng-hide, ng-init)
Контроллер
Сопоставления
Т.к. AngularJS построен на MVC, поэтому мы можем менять компоненты без затрагивания других элементов интерфейса.
Мы может указать сопоставления с контроллером, используя объектную модель $scope:
$scope.isHidden = false; $scope.PasteTitle = 'Сервис'; $scope.TextToHide = "Щелкните для скрытия"; $scope.isButtonHidden = true;
Отработка события клика на кнопке, вызов сервиса WEB API и сопоставление возвращаемых результатов в сетку шаблона:
/*================================================================================ Author : Bert O'Neill Method : buttonClick Parameters : N\A Date : 01-Sep-2015 History : Initial Draft (01-Sep-2015) Description : Public method that will get activated when ng-click event triggered on button object within UI. Call service to pull back all customer related data from database. Bind results to parent scope, which in turn is bound to UI control Test Prj. : N\A ================================================================================*/ $scope.buttonClick = function (value) { $log.debug('Enter buttonClick'); blockUI.start(); // block UI alert('Capture button click event of \'' + value + '\''); // change button caption $scope.isHidden = !$scope.isHidden; if ($scope.isHidden) $scope.PasteTitle = 'Show'; else $scope.PasteTitle = 'Service'; // call service ribbonService.getBurnfootBridgendBaghdadData() // pass back the promise and // handle in controller (service is only a pass through\shared logic between ctrls) .then(function (results) { $scope.$parent.people = results.data // update the parent scope // as you have nested controllers in view }, function (results) { alert("Failed customer data request"); // log error }); // redirect to display grid (partial) view $location.path('/grid'); blockUI.stop(); // unblock UI $log.debug('Exit buttonClick'); }
Обработка события клика на вкладке:
/*================================================================================ Author : Bert O'Neill Method : tabClick Parameters : N\A Date : 01-Sep-2015 History : Initial Draft (01-Sep-2015) Description : Public method that will get activated when ng-click event triggered on tab object within UI. Call service to pull back all customer related data from database. Bind results to parent scope, which in turn is bound to UI control Test Prj. : N\A ================================================================================*/ $scope.tabClick = function (value) { $log.debug('Enter tabClick'); blockUI.start(); // block UI alert('Capture tab click event of \'' + value + '\''); blockUI.stop(); // unblock UI $log.debug('Exit tabClick'); }
Оригинал на англ.: http://www.codeproject.com/Articles/1024688/AngularJS-RibbonBar
Комментариев нет :
Отправить комментарий