使用旧 Laravel 和 Vue.js 的更好方法

Posted

技术标签:

【中文标题】使用旧 Laravel 和 Vue.js 的更好方法【英文标题】:Better Way to use Laravel old and Vue.js 【发布时间】:2017-11-08 15:05:36 【问题描述】:

我正在使用 vue.js 2.0 和 Laravel 5.4 我想知道是否退出了一种更好的方式来发送数据控制器 -> 视图不会丢失值,被 v-model 覆盖

因为在charge vue.js 之后,这会取数据中以这种方式定义的值

data: 
    ciudad:'',

如果我尝试做类似的事情

 <input  class="form-control"  id="ciudad" name="ciudad" type="text"  v-model="documento.ciudad"  value=" $documento->ciudad " >

我丢失了控制器发送的值

【问题讨论】:

您需要重新提出您的问题。在当前状态下它没有意义。 【参考方案1】:

Vue 确实希望您从视图模型初始化数据,然后更新视图,但是,您希望使用视图中的数据来更新底层模型数据。

我认为最简单的方法是编写一个从html 初始化值的指令,因此您不需要直接访问 DOM:

Vue.directive('init', 
  bind: function(el, binding, vnode) 
    vnode.context[binding.arg] = binding.value;
  
);

这有点抽象,因此值得查看文档的Directive Hook Arguments 部分。

然后可以这样使用:

<input v-model="ciudad" v-init:ciudad="' old('ciudad') '">

这是 JSFiddle:https://jsfiddle.net/v5djagta/

【讨论】:

很好的解决方案。但是这将如何与组件一起使用?【参考方案2】:

对我来说最简单的方法是:

Laravel 控制器

  $documento = ReduJornada::where("id_documento",$id)->first();

  return view('documentos.redujornada')->with(compact('documento'));

Laravel 视图

 <input  class="form-control"  id="ciudad"  v-model="documento.ciudad"   value=" old('ciudad',  isset($documento->ciudad) ? $documento->ciudad : null) " >

Vue.js

数据:

ibanIsInvalid : false,

documento: 
  ciudad: $('#ciudad').val(),

这样我可以使用同一个视图创建和编辑一个对象,使用同一个表单,甚至使用 laravel 验证而不会丢失刷新后的数据。

如果您知道更好的方法,请告诉我...谢谢

【讨论】:

一个我完全忽略的好而简单的解决方案!我尝试了top voted answer,但这不起作用,因为 Vue 在初始化并在数据中设置属性时覆盖了它。 我已经在刀片文件中尝试过,但无法正常工作:(

以上是关于使用旧 Laravel 和 Vue.js 的更好方法的主要内容,如果未能解决你的问题,请参考以下文章

Laravel、刀片、vue.js 和 @if (@ )

Vue.js 和 Laravel 一次调用更新多行

Vue Js 作为单独安装或将 VueJs 与 Laravel 一起使用

使用 JQuery 在 PHP 中访问 Vue JS 组件数据

使用 Vue.Js / Inertia.js 和 Laravel 对结果进行分页

在 Laravel 中使用 Vue.js 和 Vue 资源调用 AJAX