lavacharts'没有使用标签正确显示图表大小(第一个标签是好的,第二个标签不正常)

时间:2016-01-24 04:21:23

标签: laravel laravel-5.1

我正在使用来自https://github.com/kevinkhill/lavacharts的套餐lavacharts。

要显示简单图表,我在控制器中使用show()方法执行以下操作:

   public function show($id)
   {
    $product = Product::findOrFail($id);

    $prices = \Lava::DataTable();


    $prices->addDateColumn('Month')
        ->addNumberColumn('Retailer Price')
        ->addNumberColumn('Consumer Price')


        ->addRow(array('2014-10-1', 67, 65))
        ->addRow(array('2014-10-2', 68, 65))
        ->addRow(array('2014-10-3', 68, 62))
        ->addRow(array('2014-10-4', 72, 62))
        ->addRow(array('2014-10-5', 61, 54))
        ->addRow(array('2014-10-6', 70, 58))
        ->addRow(array('2014-10-7', 74, 70))
        ->addRow(array('2014-10-8', 75, 69))
        ->addRow(array('2014-10-9', 69, 63))
        ->addRow(array('2014-10-10', 64, 58))
        ->addRow(array('2014-10-11', 59, 55))
        ->addRow(array('2014-10-12', 65, 56))
        ->addRow(array('2014-10-13', 66, 56))
        ->addRow(array('2014-10-14', 75, 70))
        ->addRow(array('2014-10-15', 76, 72))
        ->addRow(array('2014-10-16', 71, 66))
        ->addRow(array('2014-10-17', 72, 66))
        ->addRow(array('2014-10-18', 63, 62))
        ->addRow(array('2014-10-19', 63, 55))
        ->addRow(array('2014-10-20', 63, 56))
        ->addRow(array('2014-10-21', 63, 55))
        ->addRow(array('2014-10-24', 63, 33))
        ->addRow(array('2014-10-29', 63, 64))
        ->addRow(array('2014-10-30', 63, 63));

    $linechart = \Lava::LineChart('Price_History')
        ->dataTable($prices)
        ->title('Price history for: '.$product->name)
        ->legend(\Lava::Legend(array('position' => 'in')));

   // dd($product);
    return view('admin.products.show', compact('product'));
    }

为了从视图刀片中的控制器显示,我只需将以下代码放入刀片:

<div id="price_history_chart"></div>
{!! \Lava::render('LineChart', 'Price_History','price_history_chart') !!}

所以,我把显示代码放在下面的标签中(使用bootstrap):

   <div  class="tab-content mar-top">
                <div id="tab1" class="tab-pane fade active in">
                    <div class="row">
                        <div class="col-lg-12">
                            <div class="panel">
                                <div class="panel-heading">
                                    <h3 class="panel-title">
                                        First Tab
                                    </h3>
                                </div>
                                <div class="panel-body">
                                    <div class="col-md-8">
                                        <div class="panel-body">
                                            <div class="table-responsive">
                                                <table class="table table-bordered table-striped" id="users">
                                                    <tr>
                                                        <td>First Tab</td>
                                                        <td>        
                                                        <div id="price_history_chart"></div>
                                                            {!! \Lava::render('LineChart', 'Price_History','price_history_chart') !!} <!-- first tab display correctly like the screenshot -->

                                                        </td>
                                                    </tr>
                                                </table>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div id="tab2" class="tab-pane fade">
                    <div class="row">
                        <div class="col-lg-12">
                            <div class="panel">
                                <div class="panel-heading">
                                    <h3 class="panel-title">
                                        Second Tab
                                    </h3>
                                </div>
                                <div class="panel-body">
                                    <div class="col-md-12">
                                        <div class="panel-body">
                                            <div class="table-responsive">
                                                <table class="table table-bordered table-striped" id="users">

                                                    <tr>
                                                        <td>Second Tab</td>
                                                        <td>
                                                            <div id="price_history_chart"></div>
                                                            {!! \Lava::render('LineChart', 'Price_History','price_history_chart') !!}  <!-- second tab the size doesn't render properly like the screenshot -->

                                                        </td>
                                                    </tr>
                                                </table>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>

            </div>

 </div>

问题:

http://postimg.org/image/o9gsju91f/ 屏幕截图1 - 在第一个选项卡上加载/单击:(正确显示)

http://postimg.org/image/k18bhfsnd/ 屏幕截图2 - 在第二个选项卡上单击:(显示不正确;图表变小。)

知道如何解决这个问题吗?

EDIT     我想过调用$(window).trigger(&#39; resize&#39;);如下所示,但它没有工作

$('#tab2').on('click',function(){

    $(window).trigger('resize');
 });

4 个答案:

答案 0 :(得分:2)

呈现Google图表时,其大小取决于其所在元素的大小。由于在绘制第二个图表时隐藏了第二个选项卡,因此它默认为标准大小。选择该选项卡后,您需要重新调整图表的大小。此外,如果您希望在窗口更改大小时让图表响应,则必须重新调整大小。查看Google chart redraw/scale with window resize了解如何重新调整图表大小。

答案 1 :(得分:2)

我对bootsrap模式有同样的问题。 修复是通过PHP代码中的配置,虽然我的是3.0版本

您的代码:

$linechart = \Lava::LineChart('Price_History')
        ->dataTable($prices)
        ->title('Price history for: '.$product->name)
        ->legend(\Lava::Legend(array('position' => 'in')));

新代码:

$linechart = \Lava::LineChart('Price_History')
        ->dataTable($prices)
        ->title('Price history for: '.$product->name)
        ->width(800)//add appropriate width
        ->legend(\Lava::Legend(array('position' => 'in')));

在3.0中,代码可能是

$datatable = \Lava::DataTable();
     \Lava::LineChart('Price_History',$datatable,[
        'title'=>'Price history for: '.$product->name,
        'width'=>800
    //and you other configs
     ]);

答案 2 :(得分:1)

Lavacharts Dev here :)所以图表应该已经响应,并在窗口调整大小时调整大小。这是一个之前提出的问题,据我所知,它正在发挥作用。至于在选项卡中进入视图时调整大小,我不确定如何处理它。我想在lava.js模块中添加一个端点用于手动调整大小,因此用户可以使用显示的选项卡的bootstrap事件来激活调整大小。

思想?

PS:我在这里相当新,所以我不能评论,即使我知道这不是问题的“答案”。

答案 3 :(得分:0)

发送一个调整大小的事件对我有用,希望对我有帮助

$("your-tab").on("click", function(){
    window.dispatchEvent(new Event('resize'));
});