Я смог использовать dygraphs в ng-repeat после того, как директивы стали более понятными для меня здесь.
Чтобы использовать легенду во внешнем элементе div, а не непосредственно на графике, идентификатор используемого элемента div должен быть определен в параметры. Поскольку он должен быть уникальным, я использую $index в представлении:
<div id="{{$index}}">
</div>
И просто используйте цикл, который подсчитывает и добавляет одно и то же число к параметрам в моем контроллере:
i = 0
while i < oject.length
labelsDiv: i
++i
Я получаю данные для рисования графика в массиве, поэтому затем добавляю параметры в массив, сохраняю все в переменной и передаю это в директиву:
drawGraph.directive "graph", ->
restrict: "E" # Use as element
scope: # Isolate scope
data: "=" # Two-way bind data to local scope
opts: "=?" # '?' means optional
template: "<div></div>" # We need a div to attach graph to
link: (scope, elem, attrs) ->
graph = new Dygraph(elem.children()[0], scope.data, scope.opts)
Судя по консоли, это сработало (опции перенесены в массив, id-числа в представлении совпадают с id в опциях графиков). Однако, в то время как самая первая легенда самого первого графика работала отлично, легенды других графиков не отображаются, у всех есть ошибка:
Объект 1 не имеет метода «appendChild»
Объект 2 не имеет метода «appendChild» и так далее.
К сожалению, я даже не знаю, в чем может быть проблема. Похоже, что ng-repeat просто получает самое первое число, может быть, другие переменные еще не загружены? Также думал, что это может быть связано с областями, которые не изолированы, но на самом деле они изолированы.
Большое спасибо за твою помощь.
Dygraph
ищет элемент jquery? Я не уверен, чтоelem.children()[0]
возвращает правильный тип элемента. Похоже,Dygraph
хочет нативный элемент. - person Davin Tryon   schedule 03.02.2014