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

Posted

技术标签:

【中文标题】使用 JQuery 在 PHP 中访问 Vue JS 组件数据【英文标题】:Accessing Vue JS component data inside PHP using JQuery 【发布时间】:2020-12-08 10:57:46 【问题描述】:

我有一个 vue js 应用程序,它在我的 php 项目中自己的环境中编译和渲染。我使用的是旧版本的 PHP 框架,而不是 Laravel。

我的 vue js 应用实例是在 main.js 文件中创建的

Vue.component(
    'Dashboard',
    require('./components/dashboard/Index.vue').default
);
console.log(window.location);
const router = new VueRouter(
    mode: "history",
    base: window.location.pathname,
);

var myVueInstance = new Vue(
    router
).$mount('#app');

然后我在项目的结束标记之前使用这个编译的 vue js 应用程序。

<script src="<?php echo getenv('APP_DEBUG') == 'false'
    ? Yii::app()->baseUrl.'/js/vue/js/main.min.js'
    : 'http://localhost:8080/js/main.js' ?>"></script>

问题是我正在尝试使用 ref 名称在其中一个组件内注入和设置数据键,但我无法获取任何设置键的东西。

<div id="app">
    <quote-upload ref="quoteUpload"></quote-upload>
    <view-quote ref="viewQuote"></view-quote>
    <invoice-upload ref="invoiceUpload"></invoice-upload>
</div>
var self = this;
$(document).on("click", ".openQuoteModal", function () 
    myVueInstance.$refs.quoteUpload.vehicleid = $(this).data('id'); //this doesnt work.
); 

但我无法这样做,因为它总是未定义。

有什么办法吗?

【问题讨论】:

你的最后一个脚本是在 Vue main.js 之前还是之后执行的? @cHida 之前。 main.js 编译后的代码在结束 body 标签之前是页尾 因此,您的脚本在 Vue 实例化之前执行。尝试放在 main.js 之后 @cHida 我已经这样做了,但它说“myVueInstance”未定义。 【参考方案1】:

我尝试了以下方法,但我的 vue 实例变量仍然未定义。奇怪是因为它在我做的调用之上。

当 vue 组件被挂载时,我最终监听了 vue 组件本身的点击。我在点击时获得了值,然后在组件内部设置了vehicleid。

  mounted() 
    var self = this;
    this.$nextTick(() => 
      $(document).on("click", ".quoteUploadModal", function()
        self.vehicleid = $(this).closest('.openQuoteModal').data('id');
      );
    );
  ,

【讨论】:

以上是关于使用 JQuery 在 PHP 中访问 Vue JS 组件数据的主要内容,如果未能解决你的问题,请参考以下文章

vue.js jquery - 从 jQuery 方法访问全局函数

PHP、动态表单、访问 POST 变量、复选框

如何在vue里面访问php?

PHP 的类似 jQuery 的界面?

vue-resource,自定义指令,注册组件,ref属性访问

jQuery - 在 AJAX POST 之后访问 PHP 数组值