use App\Admin\Renderable\PostChart;
use Dcat\Admin\Widgets\Lazy;
use Dcat\Admin\Layout\Content;
public function index(Content $content)
{
// 实例化异步渲染类并传递自定义参数
$chart = PostChart::make(['id' => ...]);
return $content->body(Lazy::make($chart));
}
也可以放在内置组件中
use App\Admin\Renderable\PostChart;
use Dcat\Admin\Widgets\Card;
use Dcat\Admin\Layout\Content;
public function index(Content $content)
{
$chart = PostChart::make(['id' => ...]);
// Card 组件支持直接传递 LazyRenderable 实例,可以略过 Lazy 对象
return $content->body(Card::make($chart));
}
// 如果是 Modal、Box 等等都可以直接略过 Lazy
use Dcat\Admin\Widgets\Modal;
$chart = PostChart::make(['id' => ...]);
$modal = Modal::make()
->lg()
->title('标题')
->delay(300) // 如果是异步渲染图表则需要设置一个延迟时间,否则可能导致图表渲染异常
->body($chart);
当然也可以防止在视图或者是HTML代码中
use App\Admin\Renderable\PostChart;
use Dcat\Admin\Widgets\Lazy;
use Dcat\Admin\Layout\Content;
public function index(Content $content)
{
$chart = Lazy::make(PostChart::make(['id' => ...]));
return $content->body(view('admin.xxx', ['chart' => $chart]));
}
use App\Admin\Renderable\UserTable;
use Dcat\Admin\Widgets\Card;
use Dcat\Admin\Widgets\LazyTable;
$table = LazyTable::make(UserTable::make()->simple());
$card = Card::make('标题', $table)->withHeaderBorder();
use App\Admin\Renderable\UserTable;
use Dcat\Admin\Widgets\LazyTable;
use Dcat\Admin\Layout\Content;
public function index(Content $content)
{
$table = UserTable::make()->simple();
return $content->body(LazyTable::make($table));
}
use App\Admin\Renderable\UserTable;
use Dcat\Admin\Widgets\Card;
// 这里会自动启用 simple 模式
$card = Card::make('标题', UserTable::make())->withHeaderBorder();
如果你不希望启用 simple 模式,可以传入 LazyTable 实例
use App\Admin\Renderable\UserTable;
use Dcat\Admin\Widgets\Card;
use Dcat\Admin\Widgets\LazyTable;
$table = LazyTable::make(UserTable::make());
$card = Card::make('标题', $table)->withHeaderBorder();
Dcat\Admin\Widgets\LazyTable
onLoad
通过此方法可以监听异步加载完成事件
use App\Admin\Renderable\PostChart;
use Dcat\Admin\Widgets\Lazy;
$chart = Lazy::make(PostChart::make())->onLoad(
<<<JS
console.log('组件渲染完成');
JS
);
load
此方法可以控制是否立即渲染异步组件,默认值是true
use App\Admin\Renderable\UserTable;
use Dcat\Admin\Widgets\LazyTable;
use Dcat\Admin\Admin;
$lazy = LazyTable::make(UserTable::make())->load(false);
Admin::script(
<<<JS
setTimeout(function () {
// 3秒后自动触发异步渲染事件
{$lazy->getLoadScript()}
}, 3000);
JS
);
JS事件
use App\Admin\Renderable\UserTable;
use Dcat\Admin\Widgets\LazyTable;
use Dcat\Admin\Admin;
$lazy = LazyTable::make(UserTable::make());
Admin::script(
<<<JS
// 手动触发异步渲染事件
$('{$lazy->getElementSelector()}').trigger('table:load');
// 监听渲染完成事件
$('{$lazy->getElementSelector()}').on('table:loaded', function () {
console.log('组件渲染完成了')
});
JS
);