【问题标题】:Dynamically loading content within a partial view在局部视图中动态加载内容
【发布时间】:2020-05-09 03:43:38
【问题描述】:

基本上,我正在尝试在主页上实现选项卡。选项卡将由其他页面上的组件组成,以便快速访问。我对如何在以“惰性”方式向其发送数据的同时导入布局感到困惑。

我现在使用@section 标签来引入布局,这很好。但我只想在单击选项卡时请求它需要的数据。

在我的 main.blade.php 中:

<li>
      <a href="#tab_1" data-controller="tab_1" data-target="#tab_1" data-toggle="tab" aria-expanded="true">
      tab 1 </a>
</li>


<div class="tab-pane" id="tab_1" >
     @yield('tab_1')
</div>

在我的 tab1 中:

@extends('main')
@section('tab_1')
@foreach ($activities as $activity)
{{--implementation--}}
@endforeach
@endsection

在我的 TabController@showtab1 中:

public function showtab1(Request $request) {
   //Logic here
   return view('tab1', ['activities' => $activities]);
}

最佳方案是仅在通过调用控制器函数单击选项卡时加载每个选项卡的内容。我已经通过使用路由来更改整个页面来使其工作,但这有点破坏了选项卡的优势。

【问题讨论】:

  • 能否请您发布您的代码以及您所做的工作,以便我们至少可以了解上下文?

标签: javascript php laravel laravel-5 laravel-blade


【解决方案1】:

您通常会以使用相同布局的方式实现此功能,然后通过 URL -> 控制器 -> blade include parameter -> 刀片视图传递不同的参数。

下面的示例演示了如何在 Laravel 中跨文件执行“延迟”加载(同时仅加载 1 个选项卡):

// /routes/web.php
Route::get('/tabbed-page', 'TabbedPageController@index');
Route::get('/tabbed-page/:tab', 'TabbedPageController@show');
// /App/Http/Controllers/TabbedPageController.php

public function show($request, $tab) {
  $data = ['title'=> 'No tab'];
  if ($tab === 'tab1') { 
    $data = ['title' => 'I am tab 1'];
  }

  return view('page', [
    'tab' => $tab,
    'data'=> $data
  ]);
}
public function index($request) {
  // open tab1 by default
  redirect('/tabbed-page/tab1');
}
{{-- /resources/views/page.php, requested at for example /tabbed-page/tab1 --}}
<nav>
  <a href="tab1" class="@if($tab === 'tab1') active @endif">Tab 1</a>
  <a href="tab2" class="@if($tab === 'tab2') active @endif">Tab 2</a>
  <a href="tab3" class="@if($tab === 'tab3') active @endif">Tab 3</a>
  <a href="tab4" class="@if($tab === 'tab4') active @endif">Tab 4</a>
</nav>
<main>
  @include($tab, $data)
</main>
{{-- /resources/views/tab1.php, tab2.php, tab3.php, etc.. --}}
<div id="tab1">
  <h1>{{ $data['title] }}</h1>
  Content ....
</div>

【讨论】:

  • 好的,谢谢,我有几个问题。首先,在Route::get 中,/:tab 是否将变量 $tab 传递给传递到 url 的任何内容?其次,显示控制器功能是否对所有选项卡都通用?如果是这样,单个选项卡逻辑将在哪里执行?最后,在 page.php 文件中,@include 标记是否应该是循环引用?我假设这将是特定选项卡内容的注入位置,但我看不出将这个包含标记与多个唯一选项卡视图联系起来的逻辑在哪里。再次感谢
  • @SaileshBechar 对于您的问题:1) 是的,您可以在控制器中有一个 URL tabbed-page/my-lunch 然后 $tab 将是 my-lunch。 2) show 方法对所有以tabbed-page/anything-you-want 开头的URL 都是通用的。 3)对,我在那里打错了;我现在已经更正了代码,还添加了一个如何在控制器中执行条件逻辑的示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多