soroosh / ternobo-wire
此包已被放弃,不再维护。未建议替代包。
使用 VueJs 中的服务器端路由和服务器驱动的数据共享
v1.2.4
2021-07-07 16:18 UTC
- dev-master
- v1.2.4
- v1.2.3
- v1.2.2
- v1.2.1
- v1.2
- v1.1
- v1
- dev-renovate/configure
- dev-dependabot/composer/test-app/guzzlehttp/psr7-1.9.1
- dev-dependabot/composer/test-app/symfony/http-kernel-5.4.20
- dev-dependabot/composer/test-app/guzzlehttp/guzzle-7.4.5
- dev-dependabot/composer/test-app/laravel/framework-8.75.0
- dev-dependabot/composer/test-app/league/flysystem-1.1.9
This package is auto-updated.
Last update: 2024-09-19 12:42:29 UTC
README
使用 VueJs 中的服务器端路由和服务器驱动的数据共享
安装
Laravel 包
composer require soroosh/ternobo-wire
Vuejs 插件
npm i ternobowire-js
服务器端设置
在 resources/view 内创建 app.blade.php,然后设置应用程序根目录和 token 属性
<!DOCTYPE html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>Ternobo App</title> <link href="/css/app.css" rel="stylesheet" /> </head> <body class="font-sans antialiased" data-wire='{{ $tuuid }}'> {!! $ternoboApp !!} <script src="/js/manifest.js" defer></script> <script src="/js/vendor.js?" defer></script> <script src="/js/app.js" defer></script> </body> </html>
路由
将 TernoboWire::routes(); 添加到 routes/web.php 文件的顶部。
<?php use Illuminate\Support\Facades\Route; use Ternobo\TernoboWire\TernoboWire; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ TernoboWire::routes(); Route::get('/', "IndexController@index"); // ....
共享数据函数
服务器端适配器提供了一种为每个请求预先分配共享数据的方法。这通常在控制器之外完成。共享数据将自动加载到共享状态(Vuex)中。
在 App/Providers/AppServiceProvider.php 的 boot 函数内设置共享数据函数。
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Ternobo\TernoboWire\TernoboWire; use Illuminate\Support\Facades\Auth; class AppServiceProvider extends ServiceProvider { /** * Register any application services. * * @return void */ public function register() { // } /** * Bootstrap any application services. * * @return void */ public function boot() { TernoboWire::share(function () { return [ "appName" => config('app.name'), "is_admin" => function (){ if(Auth::check()){ return Auth::user()->is_admin; } return false; } ]; }); } }
该函数返回一个包含所有共享数据的映射数组。
客户端
服务器端应用程序配置完成后,需要设置客户端应用程序。
初始化应用程序
设置应用程序入口点,然后在前端应用程序根目录内创建名为 Pages 的文件夹(默认:resources/js)。
import Vue from "vue"; import WireApp from "wire-js"; import { plugin, store } from "wire-js"; import Vuex from "vuex"; Vue.use(plugin); Vue.use(Vuex); let dataToken = document.body.dataset.wire; document.body.dataset.wire = ""; const vue_app = new Vue({ store: store(), render: (h) => h(WireApp, { props: { dataToken: dataToken, resolveComponent: (component) => import(`./Pages/${component}`), }, }), }).$mount("#app");
**现在您可以创建任何页面并使用 TernoboWrie::render("pagename", $data) 来渲染它**