У меня есть amchart в div, отображение / скрытие которого управляется angularjs. Иногда он отображает данные, которые уже находятся в памяти. В этом случае открывается блок div, отображается диаграмма, а SVG-файл имеет ширину 10. В результате диаграмма не отображается на экране. Измените размер окна немного, и диаграмма появится, потому что, я думаю, amcharts слушает события изменения размера. Я думаю, что это известная проблема - я видел несколько сообщений о них, и я надеюсь, что одна из них подойдет мне. Я подозреваю, что угловая машина не получает циклов для запуска div до того, как amcharts сможет нарисовать свою магию (просто догадка, никаких веских доказательств).
Далее я добавил наблюдателя за событиями
piechart.write(divs.chart_div.attr('id'));
divs.chart_div.on('yes', 'snowy', function(){ // same with 'shown','resize'
console.info('============= woah ========');
});
Теперь случилось странное. Я вижу в консоли следующий стек ошибок
Error: [jqLite:onargs] jqLite#on() does not support the `selector` or `eventData` parameters http://errors.angularjs.org/1.3.13/jqLite/onargs
at REGEX_STRING_REGEXP (http://localhost:8100/lib/ionic/js/ionic.bundle.js:8762:12)
at jqLiteOn (http://localhost:8100/lib/ionic/js/ionic.bundle.js:11733:39)
at Object.JQLite.(anonymous function) (http://localhost:8100/lib/ionic/js/ionic.bundle.js:11951:17)
at Object.makePieChart (http://localhost:8100/common/services/graphinghelperService.js:528:34)
at obj.controller.$scope.myExt.renderFunc (http://localhost:8100/directives/boxRenderers2.js:179:24)
at _render_it (http://localhost:8100/modules/dashboard/dashboard.js:246:30)
at $scope.showBox.deferred.promise.then.workarea.showChild (http://localhost:8100/modules/dashboard/dashboard.js:310:17)
at processQueue (http://localhost:8100/lib/ionic/js/ionic.bundle.js:21888:27)
at http://localhost:8100/lib/ionic/js/ionic.bundle.js:21904:27
at Scope.$get.Scope.$eval (http://localhost:8100/lib/ionic/js/ionic.bundle.js:23100:28)
И этого напуганного поведения больше нет! Диаграмма появляется, если я щелкаю, чтобы перерисовать ее из кешированных данных, скрывается при повторном щелчке, и все в порядке. Больше не будет тусклых фоновых цветов div, на которые можно было бы смотреть !!.
Однако, если я изменю часы на divs.chart_div.on('shown', function(){
, тогда обработчик событий не будет вызван, и диаграмма не появится при рендеринге из кэшированных данных.
Интересно, что происходит.
watch
- это способность angular реагировать на изменение данных, наблюдая за ними. Вы используете события, а не часы. Совсем другое дело. - person HankScorpio   schedule 08.05.2015