В этой статье описана интеграция Webix с Angular JS версии 2 и ниже.
Ресурсы для интеграции Webix и Angular не входят в стандартный пакет библиотеки Webix. Вы можете найти их в соответствующем GitHub репозитории.
Для интеграции Angular JS с Webix компонентами сделайте следующее:
<!doctype html> <!--setting directive-->
<html lang="en" ng-app="webixApp">
<head>
<meta charset="utf-8">
<title>Webix-Angular App</title>
<script src="js/angular.min.js"></script>
<script type="text/javascript" src="../../codebase/webix.js"></script>
<link rel="stylesheet" type="text/css" href="../../codebase/webix.css">
<script type="text/javascript"> var app = angular.module('webixApp', [ "webix" ]); // создаем новый модуль
... // логика приложения (контроллеры)
</script>
</head>
<body>
<!-- html код -->
</body>
</html>
Учитывая то, что логика приложения может быть сложной, лучше всего хранить контроллеры в отдельном файле(-ах):
<script type="text/javascript" src="controllers.js">
Для работы с Angular, у Webix предусмотрена специальная директива webix-ui, которая запускает приложение. И здесь есть 2 варианта:
<div webix-ui type="space"> <!-- app html --> </div>
<div webix-ui="config" webix-ready="doSome(root)"
style="width: 450px; height: 300px;">
Вышеописанные модели предоставляют одинаковый функционал, но отличаются способом его реализации.
<body>
<div webix-ui type="space"> <!--создаем ряды лейаута с типом "space"-->
<div height="35">Header { {app} }</div> <!--инициализируем шаблон Webix-->
<div view="cols" type="wide" margin="10"> <!--инициализируем столбцы лейаута-->
<div width="200">
<input type="text" placeholder="Type here" ng-model="app">
</div>
<div view="resizer"></div>
<div view="tabview">
<div header="Tab1">
1. Some content here
</div>
<div header="Tab2">
2. Other content here
</div>
</div>
</div>
<div height="35">Footer</div>
</div>
</body>
Related sample: Webix-Angular:Layouts
Шаблоны input и header связаны директивой ng-model.
Вы можете посмотреть как инициализировать эти же компоненты в окружении Webix: layout, resizer, tabview, template
Webix datatable — это комплексный виджет для работы с большими наборами данных. Таблица из примера ниже состоит из 4 столбцов. Для нее установлена автонастройка высоты, которая будет зависеть от контента, а также возможность выбирать ряды. У каждого столбца есть уникальный ID, метод сортировки, и хедер, который определяется через innerHTML.
<div style="width:750px;">
<div webix-ui view="datatable" webix-data="records"
autoheight="true" select="row">
<div view="column" id="rating" sort="int" css="rating">Rating</div>
<div view="column" id="year" sort="int">Year</div>
<div view="column" id="votes" sort="int">Votes</div>
<div view="column" id="title" sort="string" fillspace="true">Title</div>
</div>
</div>
Related sample: Webix-Angular:Grid
Стоит учитывать, что любая HTML разметка вне блока "webix-ui" обрабатывается обычным образом. А теги с атрибутом webix-ui (div, p) создают Webix компоненты.
О загрузке данных читайте в этой статье.
Webix chart — это удобный инструмент для визуализации данных. Для диаграммы из примера ниже установлен тип bar. Она демонстрирует рейтинг продаж и отображается без границ.
<div style="width:500px; height:200px;">
<div webix-ui view="chart" id="mychart" webix-data="lines"
type="bar" value="#sales#" borderless="true"></div>
</div>
Related sample: Webix-Angular: Chart
Стоит учитывать, что любая HTML разметка вне блока "webix-ui" обрабатывается обычным образом. А теги с атрибутом webix-ui (div, p) создают Webix компоненты.
О загрузке данных читайте в этой статье.
При интеграции Webix в Angular вы можете отображать как массивы компонентов, так и массивы в конфигурации компонента с директивой Angular ng-repeat.
Отображение массива с одинаковыми компонентами Webix
Директива webix-ui может использоваться вместе с директивой ng-repeat фреймворка для отображения массива компонентов:
<div webix-ui>
<div ng-repeat="chart in charts" view="chart">
</div>
где chart — это переменная из области видимости, которая включает массив конфигураций компонентов:
$scope.charts = [
{ data: chart_data, series: [...] },
{ data: chart_data, series: [...] }
];
Отображение массивов внутри конфигурации компонента
Массивы в конфигурации компонента помечаются свойством stack. Внутри обозначения массива вы можете использовать свойство ng-repeat для итерации по его элементам, и указать информацию которую нужно отобразить:
<config stack='series'>
<config ng-repeat="serie in chart.series" value="#.template#"></config>
</config>
где series — это свойство переменной chart, которая содержить объект с конфигурацией виджета, и включает массив с настройками для серий:
{
data: chart_data,
series: [
{ template: "sales3", color: "#ff8" },
{ template: "sales", color: "#f8f" }
]
}
Related sample: Webix-Angular:Using ng-repeat
Интеграция Webix-Angular позволяет создавать сложные приложения с использованием связанных между собой Webix компонентов.
Детали можно узнать в этом примере: Webix-Angular:Complex Initialization
Инициализация через объект конфигурации помогает избавиться от лишней разметки (и соответствующих директив). А код всего приложения будет находиться в контроллере Angular.
Вам нужно указать только пару строчек:
<body ng-controller="webixTestController">
<div webix-ui="config" webix-ready="doSome(root)"></div>
</body>
Код контроллера
var app = angular.module('webixApp', [ "webix" ]);
app.controller("webixTestController", function($scope){
var header = { type:"header", template:"App header" };
var left = { view:"list", id:"a1", select:true, data:["One", "Two", "Three"] };
var right = { template:"Right area", id:"a2" };
// объект конфигурации
$scope.config = {
isolate:true, rows:[ // два ряда
header,
{ cols:[
left, // компонент list
{ view:"resizer" }, // компонент resizer
right // компонент template
]}
]
};
};
Related sample: Webix-Angular:Initializing from Config
Директива webix-ready вызывает функцию контроллера с параметром config root. Она позволяет устанавливать обработчики событий для всех компонентов в текущей конфигурации. При инициализации из HTML разметки, используйте директиву webix-event.
<body ng-controller="webixTestController">
<div webix-ui="config" webix-ready="doSome(root)"></div>
</body>
Root - это верхний родительский компонент в конфигурации вашего приложения. Здесь это layout с двумя рядами.
У корневого (root) компонента есть свойство isolate, которое позволяет задавать неуникальные ID его дочерним элементам. Однако при работе с обработчиками событий, вам необходимо ссылаться на такой дочерний элемент через его root. См. пример ниже:
Код контроллера
app.controller("webixTestController", function($scope){
$scope.doSome = function(root){
var list = root.$$("a1"); // обращаемся к list через root объект
var template = root.$$("a2"); // обращаемся к template через root
list.attachEvent("onAfterSelect", function(id){
template.setHTML(this.getItem(id).value);
});
list.select(list.getFirstId());
};
};
Внутри функции, которую вызывает webix-ready, ваше Webix-Angular приложение подчиняется общим правилам работы с событиями.
Наверх