为什么当其容器上有 ng-show 时图表更新失败?
Why does chart update fail when its container has ng-show on it?
我有一个包含 angular-charts.js 指令的编译指令。
我注意到当该图表的容器具有 ng-show
或 ng-hide
作为属性时,该图表不会更新 -- 它根本不显示。
Here is a plunker that demonstrates this(参见 scripts.js
指令中的 listeningComponent
)
这里的问题不在于 ng-show 和 ng-hide 属性。
这背后的根本原因是 DOM 操纵。
此处 ng-show 条件首先执行,然后加载指令,因此变量值在指令加载后在此处更改。
所以尝试使用 ng-if
而不是 ng-show。它会解决你的问题。
更改您的 listner.html 模板。
<h4>listeningComponent Directive</h4>
<div class="listener">
<p>
{{listenertext}}
</p>
<div class="bar-chart-box" ng-if="loading === false">
Bar Graph with ng-show<br>
<canvas class="chart chart-bar"
data="chartData.data"
labels="chartData.labels"
series="chartData.series">
</canvas>
</div>
<hr>
<div class="bar-chart-box">
Bar Graph without ng-show<br>
<canvas class="chart chart-bar"
data="chartData.data"
labels="chartData.labels"
series="chartData.series">
</canvas>
</div>
</div>
此外,ng-switch
似乎效果不错。
<h4>listeningComponent Directive</h4>
<div class="listener" ng-switch="loading">
<p>
{{listenertext}}
</p>
<div class="bar-chart-box" ng-switch-when="false">
Bar Graph with ng-show<br>
<canvas class="chart chart-bar"
data="chartData.data"
labels="chartData.labels"
series="chartData.series">
</canvas>
</div>
<hr>
<div class="bar-chart-box">
Bar Graph without ng-show<br>
<canvas class="chart chart-bar"
data="chartData.data"
labels="chartData.labels"
series="chartData.series">
</canvas>
</div>
<!-- can also have a loading state using this method -->
<div class="loading" ng-switch-when="true"></div>
</div>
我有一个包含 angular-charts.js 指令的编译指令。
我注意到当该图表的容器具有 ng-show
或 ng-hide
作为属性时,该图表不会更新 -- 它根本不显示。
Here is a plunker that demonstrates this(参见 scripts.js
指令中的 listeningComponent
)
这里的问题不在于 ng-show 和 ng-hide 属性。
这背后的根本原因是 DOM 操纵。
此处 ng-show 条件首先执行,然后加载指令,因此变量值在指令加载后在此处更改。
所以尝试使用 ng-if
而不是 ng-show。它会解决你的问题。
更改您的 listner.html 模板。
<h4>listeningComponent Directive</h4>
<div class="listener">
<p>
{{listenertext}}
</p>
<div class="bar-chart-box" ng-if="loading === false">
Bar Graph with ng-show<br>
<canvas class="chart chart-bar"
data="chartData.data"
labels="chartData.labels"
series="chartData.series">
</canvas>
</div>
<hr>
<div class="bar-chart-box">
Bar Graph without ng-show<br>
<canvas class="chart chart-bar"
data="chartData.data"
labels="chartData.labels"
series="chartData.series">
</canvas>
</div>
</div>
此外,ng-switch
似乎效果不错。
<h4>listeningComponent Directive</h4>
<div class="listener" ng-switch="loading">
<p>
{{listenertext}}
</p>
<div class="bar-chart-box" ng-switch-when="false">
Bar Graph with ng-show<br>
<canvas class="chart chart-bar"
data="chartData.data"
labels="chartData.labels"
series="chartData.series">
</canvas>
</div>
<hr>
<div class="bar-chart-box">
Bar Graph without ng-show<br>
<canvas class="chart chart-bar"
data="chartData.data"
labels="chartData.labels"
series="chartData.series">
</canvas>
</div>
<!-- can also have a loading state using this method -->
<div class="loading" ng-switch-when="true"></div>
</div>