#vue.js #nuxt.js #surveyjs
#vue.js #nuxt.js #surveyjs
Вопрос:
Я пытаюсь добавить Survey.js опрос в проекте Nuxt. Я добавляю внешние ресурсы в соответствии с официальной документацией
<template>
<div class="container">
<div id="surveyContainer"><survey :survey="survey"></survey></div>
</div>
</template>
<script>
export default {
head() {
return {
script: [
{
src: "https://surveyjs.azureedge.net/1.7.27/survey.vue.min.js"
}
],
link: [
{
rel: "stylesheet",
href: "https://surveyjs.azureedge.net/1.7.27/survey.css"
}
]
};
},
mounted() {
var surveyJSON = { /* json data */ };
function sendDataToServer(survey) {
//send Ajax request to your web server.
alert("The results are:" JSON.stringify(survey.data));
}
var survey = new Survey.Model(surveyJSON);
new Vue({ el: "#surveyContainer", data: { survey: survey } });
}
};
</script>
Это дает мне:
Ошибка ссылки: опрос не определен
Похоже, каким-то образом js, включенный в head (), недоступен в mounted(). Я новичок как в Nuxt, так и Survey.js , так что я не уверен. Кто-нибудь, кто может помочь?
Комментарии:
1. Почему вы не добавляете опрос как пакет?
npm install survey-vue
а затем импортировать, чтобы использовать его2. Спасибо, сначала я тоже попробовал это, но это выдает мне «Не удается прочитать свойство ‘css’ undefined» из-за некоторых зависимостей. Полагаю, jQuery и Bootstrap, но даже после их добавления я не смог избавиться от ошибки. Могут быть и другие обходные пути, например, сохранение js локально и его импорт, но я хотел бы знать, почему мое решение не работает..
Ответ №1:
Рабочая версия:
<template>
<div id="surveyContainer"><survey :survey="survey"></survey></div>
</template>
<script>
import * as SurveyVue from "survey-vue";
export default {
head() {},
data() {
var surveyJSON = {
"pages": [
// survey content
]
};
var model = new SurveyVue.Model(surveyJSON);
return {
survey: model,
};
},
methods: {
sendDataToServer(survey) {
//send Ajax request to your web server.
alert("The results are:" JSON.stringify(survey.data));
}
}
};
</script>
Проблема заключалась не в том, как включить внешний ресурс, а в смешивании «ванильного» кода Vue и Nuxt, я думаю (не эксперт ни в том, ни в другом)
new Vue({ el: "#surveyContainer", data: { survey: survey } });