@Erik2121

Как сделать переход по страницам без перезагрузки страницы (pug, express)?

Смотрите есть 3 страницы index.pug, q.pug, schedule.pug:

Server:
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.use(express.static(__dirname + '/views/'));
app.set('views', __dirname + '/views/');
app.set('view engine', 'pug');


app.get('/', function(req, res) {
    conn.query("SELECT * FROM posts ORDER BY id DESC",  function(err, rows) {
        if(err) throw err;
        res.render('index', { data : rows });
    });
});

app.get('/q', function(req, res) {
    conn.query("SELECT title FROM posts ORDER BY id DESC",  function(err, rows) {
        if(err) throw err;
        res.render('q', { q : rows });
    });
});

app.get('/schedule', function(req, res) {
    conn.query("SELECT fulltxt FROM posts ORDER BY id DESC",  function(err, rows) {
        if(err) throw err;
        res.render('schedule', { s : rows });
    });
});


Client:
.container.main
    div  
      each row in q  
       p= row.title


На каждой странице есть навигация:
.container
    nav
     .nav-wrapper
       a.brand-logo(href='/') Dashboard
       ul#nav-mobile.right.hide-on-med-and-down
        li
          a(href='/schedule') Расписание
        li
          a(href='/q') Вопросы


Я хочу чтобы можно было переключаться по страницам без перезагрузки ну тип SPA :D
Я понимаю, конечно, что лучше Angular юзать, но пока практикуюсь так.
Буду благодарен за подсказку
  • Вопрос задан
  • 1900 просмотров
Пригласить эксперта
Ответы на вопрос 3
alsolovyev
@alsolovyev
На стороне клиента создаем XMLHttpRequest (ajax) по пути( /schedule, /q ... ). В ответ от сервера получаем данные( кусок html кода ). Полученные данные вставляем в нужное нам место.
Ответ написан
@Abcdefgk
Да надо одним GET-запросом отдать всё. Это же элементарно, Ватсон, - сделать, как в почте Gmail, и безо всякого пресловутого ангуляра. Три больших (на всю страницу) div-а с контентом (отбросив их в шаблонизаторе в layouts) - и переключать ихний style.display - block/none
Вот, сварганил общую схему от скуки:
<!DOCTYPE html>
<html>
<head>
	<title>NAV</title>
	<meta charset="utf-8">
	<style>
		ul li {
			display: inline-block;
			cursor: pointer;
		}
		#one,
		#two,
		#three {
			width: 80%;
			height: 500px;
		}
		#one {
			border: 5px solid red;
		}
		#two {
			border: 5px solid green;
		}
		#three {
			border: 5px solid blue;
		}
	</style>
</head>
<body>
	<div>
		<ul>
			<li>Красный</li>
			<li>Зелёный</li>
			<li>Синий</li>
		</ul>
	</div>

	<div id="one" style="display:block"></div>
	<div id="two" style="display:none"></div>
	<div id="three" style="display:none"></div>

	<script>
		var red = document.getElementById('one');
		var green = document.getElementById('two');
		var blue = document.getElementById('three');

		var ul = document.querySelector('ul');
		ul.children[0].onclick = function() {
			green.style.display = 'none';
			blue.style.display = 'none';
			red.style.display = 'block';
		}
		ul.children[1].onclick = function() {
			red.style.display = 'none';
			blue.style.display = 'none';
			green.style.display = 'block';
		}
		ul.children[2].onclick = function() {
			red.style.display = 'none';
			green.style.display = 'none';
			blue.style.display = 'block';
		}
	</script>
</body>
</html>
Ответ написан
castomi
@castomi
Серверный администратор - tickets.settin.ru
А ещё можно делать это через web-сокеты), в остальном поддерживаю уже ответивших.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы