検索

ホームページ  >  に質問  >  本文

angular.js - Angular ng-hide 怎么立即生效?

Angular ng-hide 怎么立即生效?
我需要在设置完$scope.isHide,ng-hide生效后,才执行controller里之后的代码,比如根据容器高宽画图表。

没在dom上隐藏就画图表,会导致图表高度错误。

直接用jquery隐藏是可以解决,angular怎么搞?

html
<p class="container">
<p ng-hide='isHide' class="header"></p>
<p id="chart-container"></p>
</p>

controller
$scope.isHide = true; //需要生效后,即隐藏后header后往下执行
drawChartTo('chart-container');

采用flex布局,header隐藏后,chart-container就会更高。drawChartTo根据这个高度画图表

以下是证明这个问题的demo及基本修复方法:
https://jsfiddle.net/q7t0d2q3/

搜索后发现涉及angularjs $digest相关运行原理。修复这个问题,一是直接等dom渲染完后画图表,二是让图表感知到chart-container高度变化而自动resize。说到底是个同步异步问题。

相关资料:
http://tech.endeepak.com/blog...
https://blog.brunoscopelliti....
http://angular-tips.com/blog/...

巴扎黑巴扎黑2744日前731

全員に返信(6)返信します

  • 黄舟

    黄舟2017-05-15 17:14:30

    ここでの正しい方法は、ng-hide を変更するのではなく
    、チャートを描画するメソッドをディレクティブにカプセル化することです

    返事
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-15 17:14:30

    リーリー

    返事
    0
  • PHPz

    PHPz2017-05-15 17:14:30

    最初に値を割り当て、ng-hide = false、クリックまたは特定のイベントが発生した場合、ng-hide = true、そして同時にチャートを再レンダリングします

    返事
    0
  • 巴扎黑

    巴扎黑2017-05-15 17:14:30

    ng-ifを使えば解決できる気がします

    はこれを DOM から直接削除することですが、ng-hide は CSS を使用して要素を非表示にするだけであり、要素自体は DOM ノードを通じて引き続き見つけることができますng-if 是直接把这个东西从 DOM 中移除,而 ng-hide

    返事
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-15 17:14:30

    以前、同様の問題に遭遇しましたが、ng-show/hide を true/false に設定した後、すぐに有効にならないと感じました。これを試してみてください。

    リーリー

    返事
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-15 17:14:30

    <p ng-hide='isHide' class="header ng-hide"></p>
    <p id="chart-container"></p>

    返事
    0
  • キャンセル返事