我已使用#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中定义图表,是否也可以获取它们? 提前谢谢。
答案 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.
希望这会有所帮助。