为什么当其容器上有 ng-show 时图表更新失败?

Why does chart update fail when its container has ng-show on it?

我有一个包含 angular-charts.js 指令的编译指令。

我注意到当该图表的容器具有 ng-showng-hide 作为属性时,该图表不会更新 -- 它根本不显示。

Here is a plunker that demonstrates this(参见 scripts.js 指令中的 listeningComponent

这里的问题不在于 ng-showng-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>