Ответ 1
Что касается использования D3.js с Angular JS, ознакомьтесь с этой статьей = > http://www.ng-newsletter.com/posts/d3-on-angular.html
Мне понадобятся некоторые базовые диаграммы для одного из моих приложений, но я бы хотел использовать D3JS, если мне удастся обогнуть его вовремя, чтобы выполнить требования к проекту. Я по-прежнему развиваю свое понимание SVG и D3JS, поэтому могу эффективно использовать его, до сих пор я смог создать очень базовую гистограмму, которая берет 2-мерные массивы и показывает гистограммы, основанные на длине каждого массива в массив верхнего уровня. Это очень хорошо работает (хотя он может использовать некоторые метки украшения/оси и т.д.). Следующий вид диаграммы, на которой я собирался работать, - это круговая диаграмма, так как они также очень распространены.
В основном, мне интересно, кто-нибудь знает, если кто-то уже это сделал и отправил в github (или поделился источником в другом месте), поэтому мне не нужно начинать с нуля здесь. Я понимаю, что D3JS используется для отображения пользовательских данных, но я просто хочу, чтобы это было основополагающим, а также возможностью настройки. Так кто знает об усилиях по созданию директив для D3JS и/или тех, кто знает о чем-то, где описываются все основные типы диаграмм в D3JS (я продолжаю находить сложные примеры, которые выглядят потрясающе, но я боюсь, что я не буду понимать/учиться у них).
В принципе, я просто хотел бы иметь простой способ зайти (а затем стиль) следующие диаграммы: bar, line, pie (другие стандартные типы диаграмм, о которых я не думаю, приветствуются). Также я видел варианты Google Charts и High Charts, которые оба хороши и дают вам немного этого из коробки, но чаще всего предпочитаю наращивание, а не полосу в большинстве случаев.
Также я знаю и использовал эту статью, чтобы сделать исходную гистограмму, которая мне нужна (смешение с другим прямой учебник D3JS), но есть ли больше усилий, о которых кто-либо знает?
Вот моя базовая диаграмма:
.directive('barChart', function ( /* dependencies */ ) {
// define constants and helpers used for the directive
var width = 500,
height = 80;
return {
restrict: 'E', // the directive can be invoked only by using <bar-chart></bar-chart> tag in the template
scope: { // attributes bound to the scope of the directive
val: '='
},
link: function (scope, element, attrs) {
// initialization, done once per my-directive tag in template. If my-directive is within an
// ng-repeat-ed template then it will be called every time ngRepeat creates a new copy of the template.
// set up initial svg object
var vis = d3.select(element[0])
.append("svg")
.attr("class", "chart")
.attr("width", width)
.attr("height", height);
// whenever the bound 'exp' expression changes, execute this
scope.$watch('val', function (newVal, oldVal) {
// clear the elements inside of the directive
vis.selectAll('*').remove();
// if 'val' is undefined, exit
if (!newVal) {
return;
}
var totalDataSetSize = 0;
for (var i = 0; i < newVal.length; i++) {
totalDataSetSize += newVal[i].length
};
function calcBarWidth(d) {
return (totalDataSetSize==0)?0:d.length/totalDataSetSize*420;
}
vis.selectAll("rect")
.data(newVal)
.enter().append("rect")
.on("click", function(d,i) {alert("Total gardens: "+ d.length)})
.attr("y", function(d, i) { return i*20; })
.attr("width", calcBarWidth)
.attr("height", function(d) {return 20});
vis.selectAll("text")
.data(newVal)
.enter().append("text")
.attr("x", function(d) { return calcBarWidth(d)+50})
.attr("y", function(d, i) { return (i+1)*20; })
.attr("dx", -3) // padding-right
.attr("dy", "-.3em") // vertical-align: middle
.style("font-size", ".7em")
.attr("fill", "black")
.attr("text-anchor", "end") // text-align: right
.text(function(d,i){ var yesOrNo = i?" No":" Yes"; return d.length.toString() + yesOrNo})
},true);
}
};
});
Любые советы/указатели на этот код также приветствуются, поскольку я сказал, что все еще новичок с D3JS и до сих пор довольно новичок в Angular.
Что касается использования D3.js с Angular JS, ознакомьтесь с этой статьей = > http://www.ng-newsletter.com/posts/d3-on-angular.html
Существует 2 проекта github о директиве angular для d3.js:
Мне кажется, что мое первоначальное исследование было не таким хорошим, я просто натолкнулся на это, похоже, что он охватывает то, что я хочу:
http://phloxblog.in/angulard3/start.html#.Ui9XPBKJB-M
Тем не менее, если есть альтернативы, я открыт для того, чтобы слышать и видеть их. Если я не получу лучшего ответа на следующий день, я приму этот ответ.
-------------------------- Редактировать 1
Также, если кто-то знает, почему используется прототип здесь, я хотел бы знать, что я попытаюсь удалить зависимость от него, так как я бы предпочел не вводить больше кода, если мне это не нужно.
-------------------------- Редактировать 2
Чтение в теме более есть некоторые другие образцы, которые также имеют установку класса с целью абстрагирования/развязки кода D3 из кода AngularJS (чтобы разрешить расширение - один из аргументов, который я видел).
Я построил набор расширяемых директив для использования D3 для создания диаграмм. Они довольно гибкие, и я уже широко их использую. Вы можете получить пакет от Bower, а также "angularD3".
Основная идея состоит в том, чтобы конструктивно создавать диаграммы, сохраняя при этом доступ к более мощным аспектам D3 и обеспечивая расширяемость для дальнейшей разработки пользовательских директив.
Корневая директива <d3-chart>
действует как контейнер и контроллер для различных компонентов диаграммы, таких как ось, линии, области, дуги, градиенты и т.д. d3ChartController
позволяет вам легко писать свои собственные директивы диаграмм. Мы используем это сами для некоторых специализированных пользовательских меток и т.д.
Вот пример того, как вещи объявлены:
<d3-data src="data/data.csv" data="line" columns="year, savings, total, optimal"></d3-data>
<d3-data src="data/donutData.csv" data="pie" columns="age,population"></d3-data>
<div d3-chart>
<d3-axis data="line" name="year" label="Year" extent="true" orientation="bottom" ticks="5"></d3-axis>
<d3-axis data="line" name="savings" label="Deposits" orientation="left" ticks="5"></d3-axis>
<d3-axis data="line" name="total" label="Savings" orientation="right" ticks="5"></d3-axis>
<d3-line data="line" x="year" y="optimal" yscale="total"></d3-line>
</div>
Там также dangle.js. Это должно быть для результатов elasticsearch, но, откровенно говоря, достаточно надежное, чтобы вы могли использовать его для многих других случаев использования.
Мне было бы неплохо, если бы AngularJS мог интегрировать d3, как это было с бутстрапом. В этом разделе нет ничего нового (angular и d3). Большинство директив d3 (кроме nvd3) - два года. Вот еще одна статья с 2013 года, но идея более устойчива. Вы используете новейший d3 только для вычислений. И вы используете native angular для манипуляции с dom. Недостатком является то, что я не смог получить переходы, выполняемые этим подходом.