Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida sobre carregamento de HTML externo com AJAX

Bom dia, terminei o curso e estou brincando para aprimorar meus conhecimentos, a brincadeira é a seguinte, fazer um joguinho semelhante ao aluratyper porem com alguns aprimoramentos como login, cadastro de usuários e outras paginas dentro da aplicação, mas sem recarregar a pagina, resumindo uma SPA sem o ANGULAR(conheço o framework, estou em nível intermediário).

Basicamente tenho um arquivo main.js que é importado no index.html que faz a busca de um template html que declarei em outro arquivo...

main.js

$(function(){
    loadPage();
});

function loadPage(){

    $.ajax({

        url: 'partials/nav-principal.html',
        type: 'GET',
        dataType: 'text',

        success: function(response){

            console.log('deu certo');
            $('.view').html(response); // elemento declarado no index "puxando" o html
        },
        error: function(erro){

            console.log(erro);
        }
    })
};

$('a').on('click', function(e){
    e.preventDefault();
});

Bem estou tendo a minha parcial impressa no index, mas a função de preventDefault() que declarei no final do documento e qualquer outro evento de manipulação não funciona, só funciona se eu carregar o script diretamente na parcial.

Gostaria de saber se é possível manipular eventos sem ter que declarar os mesmo diretamente no arquivo HTML que estou requisitando.

Aqui esta o index.html

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Titulo</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><!-- nao vai dar zoom em mobile -->

    <link rel="stylesheet" href="css/bootstrap.css">
    <link rel="stylesheet" href="css/bootstrap-theme.css">

    <!-- lib scripts -->
    <script src="js/lib/jquery.js"></script>
    <script src="js/lib/bootstrap.min.js"></script>

</head>
<body>

    <div class="view"></div>

<!-- scripts funcionais carregar aqui, após o carregamento de todo o DOM -->    
<script src="js/main.js"></script>
</body>
</html>
3 respostas

Bom, existe um método padrão pra passar eventos pro angular, por isso seu código não funciona

<a href="" ng-click="do($event) >

Ele tem que ser passado com o $event para funcionar

Quanto a fazer a manipulação de eventos sem declarar diretamente nas tags, sim, é possível, mas não com o Angular, VueJS ou React, a não ser que você use JSX, que é um pouco mais complexo e totalmente feito em JS

Esses frameworks font-end javascript não entregam o código com as tags todas no HTML pro usuário ( se é isso que te preocupa ), mas eles facilitam muito a vida do dev já que você sabe exatamente aonde está chamando o evento

Para saber mais, vou deixar o link de JSX pra você ver aqui

Se ainda tiver dúvidas, só chamar :)

Obrigado Allan, mas não estou utilizando angular, queria saber se é possivel por exemplo:

main.js

$('.view').load('partials/nav-principal.html');


// AQUI... DESATIVAR O EVENTO PADRÃO DAS ÂNCORAS QUE ESTÃO NA PARCIAL SEM IMPORTAR OU DECLARAR O SCRIPT DIRETAMENTE NO ARQUIVO, APENAS NO INDEX
$('a').on('click', function(e){
    e.preventDefault();
});

index.html

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Titulo</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><!-- nao vai dar zoom em mobile -->

    <link rel="stylesheet" href="css/bootstrap.css">
    <link rel="stylesheet" href="css/bootstrap-theme.css">

    <!-- lib scripts -->
    <script src="js/lib/jquery.js"></script>
    <script src="js/lib/bootstrap.min.js"></script>

</head>
<body>

<!-- tag que "puxa" a parcial que contem a âncora que estou querendo desativar o evento padrão-->
    <div class="view"></div>

<!-- scripts funcionais carregar aqui, após o carregamento de todo o DOM -->    
<script src="js/main.js"></script>
</body>
</html>

Queria saber se existe alguma função ou método padrão do ajax (ou api mesmo) para utilizar os scripts sem declarar na parcial, só no index da aplicação. Mas vlw =)

solução!

Enfim estou usando engine de server-side (EJS) que ta mais prático, leve e gostoso de programa ksksk combinando com o AJAX. Gosto do jquery mas não consigo combinar com o angular, só queria sair um pouquinho do angular mas em contra partida ficam pesadas as aplicações sem ele na hora de passar a brincadeira pro celular ou pra uma app hibrida... :(