有没有什么方法可以让JavaScript从小型控制器Laravel-5中获得变量?
代码如下:
$langs = Language::all(); return View::make('NAATIMockTest.Admin.Language.index',compact('langs'));
public function create() { $names = $this->initLang(); Javascript::put([ 'langs' => $names ]); return View::make('NAATIMockTest.Admin.Language.create',compact('names')); } public function edit($id) { // $lang = Language::findOrFail($id); $names = $this->initLang(); Javascript::put([ 'langs' => $names ]); return View::make('NAATIMockTest.Admin.Language.edit', compact('lang')); // return View::make('NAATIMockTest.Admin.Language.edit'); }
视图创建:
@extends('AdLayout') @section('content') < script type="text/javascript"> var app = angular.module('myApp', []); app.controller('langCtrl', function($scope) { $scope.languages = langs; }); </script> <div class="container-fluid" ng-app="myApp" ng-controller="langCtrl"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <div class="panel panel-default"> <div class="panel-heading"> <h2>Create language </h2> </div> <div class="panel-body"> {!! Form::open() !!} <p class="text-center"> {!! Form::label('Name','Language: ') !!} <input type="text" name="searchLanguage" ng-model="searchLanguage"> </p> <select name="Name[]" multiple size="10" ng-model="lang" ng-click="show()"> <option value="@{{v}}" ng-repeat="(k,v) in languages | filter:searchLanguage"> @{{v}} </option> </select><br> <div class="text-center"> {!! Form::submit('Create',['class'=>'btn btn-primary']) !!} {!! Html::linkAction('NAATIMockTest\LanguageController@index', 'Back', null, array('class' => 'btn btn-primary')) !!} </div> {!! Form::close() !!} </div> </div> </div> </div> </div> @endsection
视图编辑:
@extends('AdLayout') @section('content') <script type="text/javascript"> var app = angular.module('myApp', []); app.controller('langCtrl', function($scope) { $scope.languages = langs; }); </script> <div class="container-fluid" ng-app="myApp" ng-controller="langCtrl"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <div class="panel panel-default"> <div class="panel-heading"><h2>Edit #{{ $lang->id}}</h2></div> <div class="panel-body"> {!! Form::model($lang) !!} {!! Form::label('Name','Language: ') !!} {{ $lang->Name }} <!-- {!! Form::text('Name',null,['disabled']) !!}<br> --> {!! Form::hidden('id') !!}<input type="text" name="searchLanguage" ng-model="searchLanguage"> </p> <select name="Name[]" size="10"> <option value="@{{v}}" ng-repeat="(k,v) in languages | filter:searchLanguage"> @{{v}} </option> </select><br> <div class="text-center"> {!! Form::submit('Update',['class'=>'btn btn-info']) !!} {!! Html::linkAction('NAATIMockTest\LanguageController@index', 'Back', null, array('class' => 'btn btn-primary')) !!} </div> {!! Form::close() !!} </div> </div> </div> </div> </div> @endsection
<?PHP return [ /* |-------------------------------------------------------------------------- | View to Bind JavaScript Vars To |-------------------------------------------------------------------------- | | Set this value to the name of the view (or partial) that | you want to prepend all JavaScript variables to. | */ 'bind_js_vars_to_this_view' => 'footer', 'bind_js_vars_to_this_view' => 'NAATIMockTest.Admin.Language.create', 'bind_js_vars_to_this_view' => 'NAATIMockTest.Admin.Language.edit', /* |-------------------------------------------------------------------------- | JavaScript Namespace |-------------------------------------------------------------------------- | | By default, we'll add variables to the global window object. However, | it's recommended that you change this to some namespace - anything. | That way, you can access vars, like "SomeNamespace.someVariable." | */ 'js_namespace' => 'window',];
解决方法
试试以下方法:
<script> var sampleTags = []; @foreach ($services as $service) sampleTags.push('{{ $service->name }}'); @endforeach</script>