【发布时间】:2020-03-27 12:14:02
【问题描述】:
我收到了这个有问题的代码库,其中没有加载 Vue 组件。
Vue 正在安装,但没有任何组件。
这是一个 Laravel 5.7 应用,使用刀片模板并添加了一些 Vue。
这是初始代码:
import 'babel-polyfill'
import loadClientScripts from './load-client-scripts'
import 'bootstrap-material-design/js/'
// Vue & axios
import Vue from 'vue'
import { axios } from '../axios-config'
import BootstrapVue from 'bootstrap-vue/dist/bootstrap-vue.esm'
import { createLocales } from '../vue-i18n-config'
import Noty from 'noty'
//Components
import signInForm from './components/SignInForm'
import signUpForm from './components/SignUpForm'
import forgotPassForm from './components/ForgotPassForm'
// import RegisterToAgency from './components/RegisterToAgency'
import SendEmailForm from './components/SendEmailForm'
import AgencyServiceCategories from './components/AgencyServiceCategories'
import DropdownWithCheckboxes from './components/DropdownWithCheckboxes'
import LasiCoalitionAgencies from './components/LasiCoalitionAgencies'
import ServiceProviders from "./components/ServiceProviders";
import ServiceProvider from "./components/ServiceProvider";
import vSelect from "vue-select";
window.axios = axios
Vue.component('v-select', vSelect)
// Bootstrap Vue
Vue.use(BootstrapVue)
export function createApp() {
const i18n = createLocales(window.locale)
// Components
Vue.component('sign-in-form', signInForm)
Vue.component('sign-up-form', signUpForm)
Vue.component('forgot-pass-form', forgotPassForm)
// Vue.component('register-to-agency', RegisterToAgency)
Vue.component('send-email-form', SendEmailForm)
Vue.component('agency-service-categories', AgencyServiceCategories)
Vue.component('dropdown-with-checkboxes', DropdownWithCheckboxes)
Vue.component('lasi-coalition-agencies', LasiCoalitionAgencies)
Vue.component('service-providers', ServiceProviders)
Vue.component('service-provider', ServiceProvider)
new Vue({
i18n
}).$mount('#app')
}
登录表单组件例如:
<template>
<div>
<b-form
id="sign-in-form"
@submit="onSubmit"
>
<div class="form-group">
<b-form-input
id="sgi-email"
v-model="model.email"
required
name="email"
:state="state('email')"
type="email"
:placeholder="$t('validation.attributes.email_address')"
/>
<b-form-feedback>{{ feedback('email') }}</b-form-feedback>
</div>
<div class="form-group mb-3">
<b-form-input
id="sgi-password"
v-model="model.password"
required="required"
name="password"
:state="state('password')"
type="password"
:placeholder="$t('validation.attributes.password')"
/>
<b-form-feedback>{{ feedback('password') }}</b-form-feedback>
</div>
<div class="form-group my-0">
<a
class="text-opacity forgot-pass-link"
href="#"
>
{{ $t('labels.user.password_forgot') }}
</a>
</div>
</b-form>
</div>
</template>
<script>
console.log('IM HIT')
export default {
name: 'SignInForm',
data() {
return {
model: {
email: '',
password: ''
},
validation: {}
}
},
mounted() {
this.test()
},
methods: {
test() {
console.log("test")
},
feedback(name) {
if (this.state(name)) {
return this.validation.errors[name][0]
}
},
state(name) {
return this.validation.errors !== undefined &&
this.validation.errors.hasOwnProperty(name)
? 'invalid'
: null
},
onSubmit(evt) {
evt.preventDefault()
window.axios
.post('/login', this.model)
.then(response => {
location.href = '/app'
})
.catch(e => {
if (e.response.status === 422) {
this.validation = e.response.data
return
}
})
}
}
}
</script>
任何想法都有帮助!
在示例登录表单中,控制台确实输出了我放置的“Im hit”以确保已加载内容。
谢谢
【问题讨论】:
-
好吧,他们为什么不加载呢?它是否给您某种错误消息?您是否检查了 Vue.js 开发工具以了解 Vue 运行时及其状态在后台的样子?
-
在 vue devtools 中,我看到
并没有别的。如果我用 $vm0 查看控制台,它没有子级。 -
根据提供的代码,没有别的了。您只是在注册组件。是否有任何实际使用组件的 Vue 标记?控制台是否报告任何错误消息?如果这是一个完全设计的应用程序,其中元素突然消失,这意味着在应用程序中的渲染过程中出现了问题(但是,看起来在发布的代码中不会发生该错误,除非没有嵌入此 JS 的 HTML 中 ID 为
#app的 HTML 元素) -
有一个#app,这是我检查的第一件事:P。将在初始问题中添加一个组件。
-
我的意思是,根据您拥有的代码,没有组件被传递给
new Vue实例,因此即使您发布标记,也不会是通过挂载呈现的标记那个新鲜的 Vue 实例。您需要在new Vue选项中实际指定一个组件,例如:new Vue({i18n, render: h=>h(RootVueComponentHere)}).$mount('#app')其中RootVueComponentHere需要是根组件(可能只是一个带有router-view的组件)
标签: vue.js laravel-5 vuejs2 vue-component