Angular NVD3:如何访问HTML中定义的图表对象

时间:2017-08-18 07:45:53

标签: javascript angularjs charts angular-nvd3

我已使用#include <memory> #include <iostream> #include <type_traits> struct A { A() { std::cout << "A()" << std::endl; } ~A() { std::cout << "~A()" << std::endl; } }; template <typename Functor> struct Holder { static void call(char* sbo) { Functor* cb = reinterpret_cast<Functor*>(sbo); cb->operator()(); } static void deleter(char* sbo) { auto impl = reinterpret_cast<Functor*>(sbo); impl->~Functor(); } }; template <typename Sign> struct Function; template <> struct Function<void()> { Function() = default; ~Function() { deleter_(sbo_); } template <typename F> void operator=(F&& f) { using c = typename std::decay<F>::type; new (sbo_) c(std::forward<F>(f)); call_fn_ = Holder<c>::call; deleter_ = Holder<c>::deleter; } void operator()() { call_fn_(sbo_); } typedef void(*call_ptr_fn)(char*); call_ptr_fn call_fn_; call_ptr_fn deleter_; char sbo_[256] = {0,}; }; int main() { Function<void()> f; { std::unique_ptr<A> a(new A()); f = [a=move(a)] () mutable { return; }; } std::cout << "Destructor should not be called before this" << std::endl; return 0; } 指令定义了一个多栏图表,并将<nvd3>data传递给我的控制器中定义的

options

现在我想以某种方式访问​​为创建某些操作而创建的图表对象,例如,获取 xAxis 缩放功能。

如果图表是在JavaScript中定义的,那么我就有了这个对象:

<nvd3 options="vm.options" data="vm.data"></nvd3>

如果在HTML中定义图表,是否也可以获取它们? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

我不确定您是否再需要这个(已经快一年了),但是我想我可能已经找到了可以解决的办法了?还是引导您(或其他任何人)找到不需要的东西?

在弄乱对象之后,如果您一开始只需要它,则可以使用nvd3标签中的“ on-ready”选项。

<nvd3 options="yourOptions" data="yourData" on-ready="callbackFunction">

然后将范围传递到您在控制器中设置的函数中。 另请参阅:https://github.com/krispo/angular-nvd3/issues/445

可以在选项中使用回调选项,从而允许您使用图表变量。所以可能是

callback: function(chart) { *use chart here* }

另请参见:http://krispo.github.io/angular-nvd3/#/lineChart,并查看侧面的回调选项。您也许可以在html标签中设置回调,但是我还没有尝试过。

答案 1 :(得分:0)

您可以直接使用angular-NVD3来获取图表。如果您使用api属性,则可以“访问内部指令范围。例如,我们可以通过$ scope.api.getScope()。chart获取图表对象。 [v0.1.0 +]”。来自http://krispo.github.io/angular-nvd3/#/quickstart

换句话说,当您使用指令时,请定义api属性,例如:

<nvd3 options="ReportCtrl.avgVisitorsTimeSeriesOptions" data="ReportCtrl.avgVisitorsTimeSeriesData" api="ReportCtrl.d3API"></nvd3>

然后在控制器中,您可以使用API​​访问指令范围,从中可以获取d3图表对象,例如:

console.log(vm.d3API.getScope().chart); // This gets the actual d3 chart from inside the directive's scope.

希望这会有所帮助。