私は、アプリケーションのすべてのロールに権限のセットがあるアクセスコントロールリストを作成しています。私は、チェックボックスのリストを表示するロール編集ページを作成しようとしています。選択されたボックスは、ロールがすでに持っている権限になります。 JavaScriptファイルからアクセスしたいロールに関連付けられた一連のアクセス許可があります。つまり、私はVueインスタンスからアクセスしたい配列$role->permissions->pluck('name'))
を持っています。次に、このインスタンスから、permissionsSelected
というプロパティをブレードファイルのチェックボックスにバインドします。これは私の編集ページです。ブレード変数をvueインスタンスに渡してJavaScriptファイルで使用できるようにするにはどうすればよいですか?
@extends('layouts.manage')
@section('content')
<div class="flex-container">
<div class="columns m-t-10">
<div class="column">
<h1 class="title">Edit {{$role->display_name}}</h1>
</div>
<div class="column">
<a href="{{route('roles.edit', $role->id)}}" class="button is-primary is-pulled-right"><i class="fa fa-user-plus m-r-10"></i> Edit this Role</a>
</div>
</div>
<hr class="m-t-0">
<form action="{{route('roles.edit', $role->id)}}" method="POST">
{{ csrf_field() }}
{{ method_field('PUT') }}
<div class="columns">
<div class="column">
<div class="box">
<article class="media">
<div class="media-content">
<div class="content">
<h2 class="title">Role Details:</h2>
<div class="field">
<p class="control">
<label for="display_name" class="label">Name (Human Readable)</label>
<input type="text" class="input" name="display_name" value="{{$role->display_name}}" id="display_name">
</p>
</div>
<div class="field">
<p class="control">
<label for="name" class="label">Slug (Cannot be edited)</label>
<input type="text" class="input" name="name" value="{{$role->name}}" disabled id="name">
</p>
</div>
<div class="field">
<p class="control">
<label for="description" class="label">Description</label>
<input type="text" class="input" value="{{$role->description}}" id="description">
</p>
</div>
</div>
</div>
</article>
</div>
</div>
</div>
<div class="columns">
<div class="column">
<div class="box">
<article class="media">
<div class="media-content">
<div class="content">
<h2 class="title">Permissions:</h2>
@foreach ($permissions as $permission)
<div class="field">
<b-checkbox v-model="permissionsSelected" native-value="{{$permission->name}}">{{$permission->display_name}} <em>({{$permission->description}})</em></b-checkbox>
</div>
@endforeach
</div>
</div>
</article>
</div>
</div>
</div>
</form>
</div>
@endsection
Edit.blade.php
を(私はタグ<b-checkbox></b-checkbox>
ので、チェックボックスのためのUIコンポーネントBuefyを使用しています)これは私のJavaScriptでVueのインスタンスがApp.js
const app = new Vue({
el: '#app',
data: {
auto_password: true,
password_options: 'keep',
permissionType: 'basic',
permissionsSelected: '',
resource: '',
crudSelected: ['create', 'read', 'update', 'delete']
},
methods: {
crudName: function(item) {
return item.substr(0,1).toUpperCase() + item.substr(1) + " " + app.resource.substr(0,1).toUpperCase() + app.resource.substr(1);
},
crudSlug: function(item) {
return item.toLowerCase() + "-" + app.resource.toLowerCase();
},
crudDescription: function(item) {
return "Allow a User to " + item.toUpperCase() + " a " + app.resource.substr(0,1).toUpperCase() + app.resource.substr(1);
}
}
});
JSファイルにpermissionsSelected: {!!$role->permissions->pluck('id')!!}
のようなことをしたいと思っています。これをどうすれば解決できますか?
[AJAX](https://en.wikipedia.org/wiki/Ajax_(プログラミング))を使用してください。 –
これに対する答えは、あなたが非常に、非常に、これを行うには非常に良い理由がない限り、これをしないでください。 これは、コンパイル時にC#ファイルに値を挿入するCを書く方法を尋ねるようなものです。 しないでください。それは悲惨な経験であり、誰もがそれを理由に傷ついてしまいます。モジュラー化する。別のサービスから1つのサービスを呼び出します。サービスの契約に従って、必要なデータを要求します。 JSの世界では、Ajaxが呼び出す、つまりサーバーでレンダリングされたテンプレート(Vue独自のSSRを使用し、動的コードを使用せず、別の言語を使用)を使用してサーバーがデータをロードすることを意味します。 – Norguard
要するに、そうではないはずですが、それ以外の方法がない場合(ヒント:すでに言われていますが)、データをJSONで表示するだけです。 'permissionsSelected:{!! json_encode($ role-> permissions-> pluck( 'id'))!!} 'それを行う必要があります。 – Jhecht