#javascript
#javascript
Вопрос:
Я имею в виду приведенный ниже код. https://github.com/jonasschmedtmann/complete-javascript-course/blob/master/9-forkify/final/src/js/views/searchView.js
Я создал функцию и попытался импортировать функцию в другой js-файл, но это не работает. Если я напишу «elements.searchInput.value;», это не сработает, а если я сделаю «console.log (elements.searchInput.value)», это сработает. Я делаю то же самое, что и файл ссылки, но просто задаюсь вопросом, почему мой код не работает.
index.js
import "./../styles/style.scss";
import Search from './models/Search';
import * as searchView from './views/SearchView';
import { key, proxy } from './config';
import { elements } from './views/Base';
const state = {};
const controlSearch = async () => {
const query = searchView.getInput(); // <- This doesn't work
console.log(query) // Get nothing
if(query) { // <- Can't get in to this part
state.search = new Search(query);
console.log("New Search", state);
}
}
elements.searchForm.addEventListener('submit', e => {
event.preventDefault();
controlSearch();
});
searchView.js
import { elements } from './base';
export const getInput = () => {
elements.searchInput.value; // This code won't show up in controlSearch function
export const clearInput = () => {
elements.searchInput.value = '';
};
base.js
export const elements = {
searchForm: document.querySelector('.search'),
searchResult: document.querySelector('.movie_list'),
searchInput: document.querySelector('.search__field')
}
Search.js
import { key } from '../config';
export default class Search {
constructor(query) {
this.query = query;
}
async getResults() {
try {
const res = await axios(`http://`);
this.result = res.data.results;
}
catch (error) {
alert(error);
}
}
}
Комментарии:
1. Что такое ошибка? Также назовите файл
2. Когда вы говорите «не работает» и «не отображается», есть ли какие-либо ошибки в консоли разработчика? Или содержимое
query
просто пустое?3. Извините за путаницу, да, запрос пуст. Это должно быть elements.searchInput.value . Также ошибка не отображается…
4.
search__field
два_
? это верно?5. »
console.log(query) // Get nothing
» как неопределенный? Попробуйтеconst query = await searchView.getInput();
Ответ №1:
Функции получения должны возвращать значение.
const yourFunction = () => { return yourVariable };
Или с помощью функции arrow вы можете использовать:
const yourFunction = () => yourVariable;
Комментарии:
1. Решением, которое я придумал, было возвращение значения, но когда мне понравился export const GetInput = () => ‘elements.searchInput.value’ , он не распознает значение searchInput, а просто принимает его как строку «elements.searchInput.value»
2. Конечно, вы должны возвращать свою переменную вместо моего текста или строки. Но вы должны что-то вернуть.
const yourFunction = () => { return yourVariable; }
илиconst yourFunction = () => yourVariable;
… Это всего лишь пример, который я отредактирую.
Ответ №2:
это ваша проблема здесь
export const getInput = () => {
elements.searchInput.value;
Вы ничего не возвращаете
, измените его на
export const getInput = () => elements.searchInput.value;
или
export const getInput = () => {
return elements.searchInput.value;
}
Комментарии:
1. кроме того, открывая отправленную вами ссылку, я считаю, что это тоже было сделано
2. Спасибо, это сработало!! Я думал, что сделал то же самое, но, похоже, я сделал что-то не так. Также по какой-то причине мой возврат сначала не сработал… возможно, неправильный синтаксис. В любом случае, большое вам спасибо за вашу помощь!!